------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
抽象类
抽象方法:由abstract 修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。
抽象类:一个类中如果包含抽象方法,就应该用 abstract 关键字声明为抽象类。
一个抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类。
可以没有抽象方法,抽象类不能建立对象,所以无法实例化
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)
abstract 和final关键字不可以同时用于修饰一个类,因为final 关键字使得类不可继承,而abstract 修饰的类如果不可以继承将没有任何意义。也不能与private, static 共存
抽象类的意义:为其子类提供一个公共的类型;封装子类中的重复内容;
定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。
抽象类的成员特点:
成员变量:
静态 可以,类名直接调用
非静态 可以,子类对象调用
构造方法:
有构造方法,但是不能实例化,作用:用于子类访问父类数据的初始化
成员方法:
静态 普通方法,有方法体,可以,类名直接调用
非静态普通方法,有方法体,可以,子类对象调用
抽象类的抽象方法,用于限定子类必须完成某些动作
抽象类的非抽象方法,用于提高代码的复用性
没有抽象方法的抽象类,存在有适配器意义
抽象类给子类成员变量赋值,老师案例
abstractclassTeacher {
private String name;
public Teacher(String name) {
super();
this.name = name; // 父类构造器对子类成员变量赋值
}
publicabstractvoid teacher();
public String getName() {
returnname;
}
// publicvoid setName(String name) {
// this.name= name;
// }
}
class JavaSE extends Teacher {
public JavaSE(String name) {
super(name);
}
@Override
publicvoid teacher() {
System.out.println(getName() + " JavaSE");
}
}
publicclassTeacherTest {
publicstaticvoid main(String[] args) {
Teachert = new JavaSE("呵呵");
// Teachert = new JavaSE(null);
// t.setName("呵呵");
t.teacher();
}
}
接口中成员的定义:接口没有构造方法
成员变量:public static final数据类型变量名 = 初始化值; // 需要初始化,只能常量
成员方法:public abstract返回值类型方法名(); // 全抽象,不能建立对象
修饰符都是固定模式,少写或不写,编译时会自动补全
一个类实现了某个接口后必须实现该接口中定义的所有方法,否则还是抽象类。
接口中的多态:接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象;通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。即接口引用指向实现类的对象
一个类多实现接口是没有安全隐患的:接口方法没有方法体,根本不能运行,接口方法怎么实现功能,完全由实现类重写决定。
实现类如果实现多个接口,接口中的全部抽象方法都要覆盖,包括接口继承的的父类的抽象方法。
接口的意义:降低程序的耦合性,提高程序的扩展性。
类和接口之间的关系:
类与类之间是继承关系,单继承,可以多层继承
类与接口之间是实现关系,可以多实现
接口与接口之间是继承关系,支持多继承
Java 中支持多继承吗? 类与类之间是单继承,接口之间可以多继承。
抽象类和接口的区别:
成员区别:
抽象类:变量,常量;抽象方法,非抽象方法;构造方法
接口:常量;抽象方法;没有构造方法
关系区别:(继承与实现)
设计理念区别:
抽象类:is a 关系,共性功能
接口:like a 关系,扩展功能