8.15晨写
1.接口和抽象类的区别
1)成员的区别
成员变量:
接口:只能是常量,存在默认修饰符 public static final ,可以省略不写
抽象类:可以是变量,也可以自定义常量
成员方法:
接口:只能是抽象方法, 默认修饰符:public abstract ,可以省略不写
抽象类:既可以存在抽象方法,也可以存在非抽象方法, 如果是抽象方法,abstract不能省略;
构造方法:
接口:没有构造方法, 通过接口多态实例化,通过具体的子实现类对象的创建
抽象类:无参/有参构造方法, (抽象类不能实例化,需要靠具体的子类实例化)分层初始化,先父类初始化,然后在子类 初始化
2)关系区别
类与类: (类:包含具体类或者抽象类), 继承关系 extends, 可以单继承,不能多继承,可以多层继承;
类与接口:实现关系 implements,一个类继承另一个类的同时,可以实现多个接口
接口与接口:继承关系:extends,可以支持单继承,也可以多继承以及多层继承
3)设计理念的区别
接口:体现出的这个事物本身不具备的功能,一种额外功能;是一种"like a"的关系
抽象类: 由于不能实例化,需要具体的子类实例化,体现的是一种"isa"的关系
A类是B类的一种,或者是B是A的一种
2.多态的成员访问特点
Fu f = new Zi(); 向上转型 :父类引用指向子类对象
成员变量:编译看左,运行看左
成员方法:编译看左,运行看右,因为存在方法重写
构造方法:如果Fu是抽象类,分层初始化
先父类,然后子类分别初始化; ---->抽象类多态
如果Fu是接口,借助于子实现类,但是如果子实现类也是抽象类,这个抽象类一定也有具体子类,还是分层初始化;
---->接口多态
3.final关键字的特点
final关键字:
可以修饰成员变量,此时变量是一个"常量";
可以修饰的成员方法,该方法不能被重写
可以修饰类,该类不能继承 ; 引用类型 String字符串类 被final修饰
4.方法的形式参数是引用类型,具体类的情况,参数如何传递?
方法的形式参数如果是引用类型, 具体类
class Teacher {
public void xxx ( ) {
. . .
}
}
class Demo {
public void show ( Teacher t) {
Teacher 类对象
t. xxx ( ) ;
}
}
测试类去测试
Demo d = new Demo ( ) ;
Teacher t = new Teacher ( ) ;
d. show ( t) ;
5.接口与接口的关系,类与接口的关系
类与接口:实现关系 implements,一个类继承另一个类的同时,可以实现多个接口
接口与接口:继承关系:extends,可以支持单继承,也可以多继承以及多层继承