进化表
继承---->多态---->抽象类---->接口
继承关键字:extends
子类将会继承父类所有的功能
例如:
class Person{
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int name){
this.age = age;
}
}
class Student extends Person{
//Student 继承了 Person,有Person所有的功能
}
class Test{
public static void main(String[] args){
Student stu = new Student();
stu.setAge(18);
System.out.print(stu.getAge());
}
}
在java中 没有写extends ,编译器会自动加上 extends Object .
任何类 都会继承Object类,也就是说Object类 是所有类的父类
向上转型:
Person p = new Student();
因为Student继承自Person ,具有Person所有的功能,所以这种方式是可以的
向下转型
Person p = new Student();
Student s = (Student)p;
向下转型有可能会失败,例如:
Person person = new Person();
Student s = (Student)person;
失败JVM会报ClassCastException
多态:
在继承的基础上
多态是指针对某个类型方法的调用,其真正执行的方法取决于运行时期实际类型的方法
抽象类:
由于父类的方法没有实际意义,可以去掉方法的执行语句
abstract class Person{
public abstract void run();
}
如果一个class定义了方法,但是没有具体的执行代码,这个方法就是抽象方法,用abstarct修饰
用abstarct修饰的类 就是抽象类
抽象类无法实例化
那不能被实例化的抽象类有什么用呢?
因为抽象类被设计成只能用于继承,可以强迫子类实现其定义的抽象方法,起到一定的“规范”作用
例如:
抽象类Person定义了run方法,那么其子类Student就必须override run方法;
面向抽象编程的本质:
上层代码只定义规范
不需要子类就可以实现业务逻辑
具体的业务逻辑由不同的子类实现,调用者并不关心;
接口:
接口就是抽象类的进化 版
如果一个抽象类没有字段,所有的方法都是抽象方法,那就可以把这个抽象类改为接口
抽象类:
abstract class Person{
public abstract void run();
public abstract String getName();
}
接口:
Interface Person{
void run();
String getName();
}
一个类只能继承另一个类,但是可以实现多个接口
接口也可以继承接口,相当与扩展了接口的方法