A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

day10:
1.继承:
a)研究类与类之间的关系
b)概念:
1)如果多个类具有相同的属性和行为,我们可以抽取出共性的内容定义父类,这时再创建相似的类时只要继承父类即可。
2)当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以定义为现有类的子类
c)子类会自动拥有父类所有可继承的属性和方法,无需重新定义。并且可以直接使用非私有的父类成员。
d)从类与类之间的设计关系来看,子类必须属于父类的一种时,才会继承。
2.继承格式:
        继承的关键字 extends   
                子类 extends 父类{}
3.继承的好处:
a)提高了代表的可维护性
b)提高了代码的复用性
c)让类与类之间产生了继承关系
4.继承的弊端:
                类与类之间的耦合度过高
5.继承特点:
a)java中类只能够单继承,不能多继承,可以多层继承
                class Ye extends Object {}
                class Fu extends Ye{}
                class Zi extends Fu {}
b)所有的类都直接或者间接的继承了 Object类,Object类称为祖宗类
6.继承的注意事项:
a)使用关键字 extends 让类与类之间 产生继承关系
b)父类私有的成员,子类不能继承,因为根本看不到
c)不能为了继承某个功能而随意进行继承操作, 必须要符合 is a 的关系
                        苹果 is a 水果
                        男人 is a 人
                        狗   is a 人 , 这种情况就不能继承了
7.变量的就近访问原则
                局部变量>子类成员变量>父类成员变量

                this.变量名     访问本类变量
                super.变量名    访问父类变量

                this.方法名()     访问本来方法
                super.方法名()    访问父类方法
8.方法重写:
a)概念:在继承关系中,子类可以重新定义父类继承过来的方法,可以将没有方法体的方法加上方法体,完成具体事项,也可以将有方法体的方法重写,
b)用处:让该功能更为强大。
c)特点:当创建对象时,调用的为子类重写后的方法。
d)注意事项:
                权限修饰符,子父类相同或者子类大
                方法名、参数,返回值类型子父类必须相同
9.抽象类
a)抽象类用来描述一种类型应该具备的基本特征与功能,具体如何去完成这些行为由子类通过方法重写来完成。
b)抽象类概述:当使用面向对象的方式描述现实生活中的事物时,有些概念比较泛泛抽象的,不需要创建实例对象。而又需要定义这样一个类,规定其子类所应该具备的成员变量和成员方法时,可以将一个事物定义为抽象类,该类的方法一般为抽象方法,没有实现。具体的实现由子类自己完成。
c)抽象方法:方法只有声明部分,没有方法体。
d)抽象类:包含抽象方法的类,一定是抽象类,使用abstract修饰。
e)抽象类的特点:                 
1)抽象类与抽象方法都必须使用 abstract来修饰                 
2)抽象类不能创建对象,只能被子类继承,出现的意义就是为了让子类继承,重写方法,规定了其子类的通用功能和属性
3)如果一个类继承了抽象类,则需要重写其所有抽象方法,才能创建对象,否则仍为抽象类
4)抽象类中可以有抽象方法,也可以没有抽象方法

day11:
1.接口:
a)概念:当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式,接口。接口是功能的集合。
b)格式:
定义接口:定义一个接口用interface关键字
public interface Inter{}
实现类实现:用implements关键字
public class InterImpl implements Inter{}                       
a)接口的特点:
i.不需要被abstract修饰。
ii.类实现接口,可以单实现,还可以多实现。
iii.接口可以继承接口,可以单继承,也可以多继承。
iv.接口与父接口的功能可以重复,均代表要具备某种功能。
b)接口不能直接创建对象,通过多态的方式,由子类来创建对象
c)接口中的成员特点:
                成员变量:
                        只能是final 修饰的常量
                        默认修饰符: public static final
                构造方法:
                        无
                成员方法:
                        只能是抽象方法
                        默认修饰符: public abstract
d)类与类,类与接口,接口与接口之间的关系
i.类与类之间:继承关系,单继承,可以是多层继承
ii.类与接口之间: 实现关系,单实现,也可以多实现
iii.接口与接口之间:继承关系,单继承,也可以是多继承                       
iv.Java中的类可以继承一个父类的同时,实现多个接口
e)抽象类和接口的区别
i.成员的区别
                                抽象类:
                                        成员变量:可以是变量,也可以是常量。
                                        成员方法:可以是抽象的,也可以是非抽象的。
                                接口:
                                        成员变量:只能是常量。
                                          默认修饰符:public static final
                                        成员方法:只能是抽象的。
                                          默认修饰符:public abstract
                                        推荐:默认修饰符请自己永远手动给出。
ii.体现的理念不同
抽象类里面定义的都是一个继承体系中的共性内容。
接口是功能的集合,是一个体系额外的功能,是暴露出来的规则。

2.多态:
a)概念:同一个对象,在不同时刻表现出来的不同状态。
举例:水(水,冰,水蒸气)
          猫(猫,动物)       
b)多态使用的前提:
                        1,有继承或者实现关系
                        2,要方法重写
                        3,有父类(接口)的引用指向子类对象。
c)多态的成员访问特点:
                        多态时,所有表现形式都是父类的表现形式,
只有调用方法时,运行的是子类重写的方法
1.成员变量
                                编译看左边,运行看左边。
2:成员方法
                                编译看左边,运行看右边。
d)多态的好处:
                        提高了程序可维护性和可扩展性。
e)多态的弊端:
                        不能访问子类的特有功能, 要想使用,要么向下转型,要么重新创建子类对象。
f)多态的分类
类的多态(普通类,抽象类)
public abstract class Fu {
                  public abstract void method();
}
public class Zi extends Fu {
public void method(){
                             System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();

接口的多态
public interface Fu {
        public abstract void method();
}
public class Zi implements Fu {
        public void method(){
        System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
g)多态中的转型:
                1:向上转型
                        把子类对象赋值给父类(接口)的引用  自动类型提升  int a = 0;  double b =a;
                2:向下转型
                        把父类(接口)的引用强制转换成子类对象
                        double b = 10.0;
                        int a = (int)b;
                        Fu  fz = new Zi();(前提)
                        Zi  zf = (Zi)fz;
h)instanceof 关键字, 用于引用数据类型判断
                格式: 对象名 instanceof 类名
                返回值: true, false
                作用:判断某个对象是否属于某种数据类型

day12:
1.构造方法:用来创建对象的,同时还可以为成员变量赋值
a)格式:
                修饰符 类名 (参数列表) {
                        ...
                }
b)构造方法的特点:
1.构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。
2.构造方法名称必须和类名保持一致。
3.构造方法在什么时候执行哪? 在 new的时候,自动执行,只执行一次
4.每个class都拥有构造方法,构造方法不写也有,编译的时候,编译器会自动检查类中是否有构造方法。
5.如果没有,编译器就会自动添加一个构造方法,编译器添加的构造方法格式:public Person(){}
6.如果自己添加了构造方法,编译的时候,编译器就不会自动添加构造方法.
2.this关键字,本类对象的引用
a)this是在方法中使用的,哪个对象调用了该方法,那么,this就代表调用该方法的对象引用
b)this什么时候存在的?当创建对象的时候,this存在的
c)this的作用:用来区别同名的成员变量与局部变量(this.成员变量)
2.super: 指的是父类的存储空间(理解为父类的引用)
a)调用父类的成员变量:super.成员变量;
b)调用父类的构造方法:super(参数);
c)调用方法的成员方法:super.成员方法();
3.继承中的构造方法注意事项:
a)如果我们手动给出了构造方法,编译器不会在给我们提供默认的空参数构造方法
                   如果我们没写任何的构造方法,编译器提供给我们一个空参数构造方法
b)在构造方法中,默认的第一条语句为 super();
           它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作
c)当父类中没有空参数构造方法的时候,怎么办?
                        1: 通过 super(参数) 访问父类有参数的构造方法
                        2: 通过 this(参数) 访问本类中其他构造方法
d)super(参数) 与 this(参数) 不能同时在构造方法中存在

2 个回复

正序浏览
很好,这个早上喝的不是一锅粥,而是一杯白开水,清晰了很多啊
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
整理的挺全的。哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马