接口与继承
6 接口与继承
6.1 对象转型
子类转父类(向上转型) 子类对象一定是父类的一种类型,
父类转子类(向下转型)
父类转子类,有的时候行,有的时候不行,所以必须进行强制转换。
强制转换的意思就是 转换有风险
注意: 没有继承关系的两个类,互相转换,一定会失败
实现类转换成接口(向上转型)
接口转换成实现类(向下转型)
6.2 重写
调用重写的方法
调用就会执行重写的方法,执行子类重写父类后的方法
public class Animalt {
String name;
int legs;
public void run(){
System.out.println("奔跑");
}
public void eat(){
System.out.println("吃东西");
}
}
public class Cat extends Animalt {
@Override
public void eat(){
System.out.println("吃老鼠");
}
public static void main (String[] args) {
Animalt a=new Animalt();
a.eat(); //吃东西
Cat c =new Cat();
c.eat(); // 吃老鼠
}
}
6.3 多态
要实现类的多态,需要如下条件
1. 父类(接口)引用指向子类对象
2. 调用的方法有重写
public class Animalt {
String name;
int legs;
public void run(){
System.out.println("奔跑");
}
public void eat(){
System.out.println("吃东西");
}
public static void main(String[] args) {
Animalt ac=new Cat(); //父类的引用指向子类对象
ac.eat(); //吃老鼠
Animalt ad=new Dog();
ad.eat(); //吃肉
}
}
public class Cat extends Animalt {
@Override
public void eat(){
System.out.println("吃老鼠");
}
}
public class Dog extends Animalt {
@Override
public void eat(){
System.out.println("吃肉肉");
}
}
6.4 Object类是所有类的父类
(所有的类都是Object类的子类,直接或者间接继承Object类)
Object类提供一个toString方法,所以所有的类都有toString方法
finalize()
当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件
当它被垃圾回收的时候,它的finalize() 方法就会被调用。
finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。
6.5 抽象类与接口的区别
区别1:
子类只能继承一个抽象类,不能继承多个
子类可以实现多个接口
区别2:
抽象类可以定义
public,protected,package,private
静态和非静态属性
final和非final属性
但是接口中声明的属性,只能是public
注: 抽象类和接口都可以有实体方法。 接口中的实体方法,叫做默认方法
6.6 默认方法
默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法
Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现体,并且被声明为了default
6.7 UML类图
UML-Universal Module Language
统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系