1、方法重写的规则
在子类继承父类时返回值类型、方法名、参数列表与父类相同,子类访问修饰符不得小于父类,抛出的异常不能严于父类、方法体不同
2、什么是多态
有继承、有重写、有父类引用指向子类对象
父类类型作为参数
父类类型作为返回值
子类对象引用父类方法
3、
向上转型:父类引用指向子类对象
父类类型 对象名 = new 子类类型()
这时不能使用子类特有的属性和方法
//在子类种进行了父类中toHospital()的方法重写pet.toHospital();会调用Dog类的toHospital,而不是Pet类的
总结:由一个父类的引用指向一个子类的对象称为向上转型此时通过父类引用变量调用的是子类覆盖或继承了父类的方法,不是父类的方法此时通过父类引用变量无法调用子类特有的方法(如Dog类种包含一个特有的接飞盘的方法catchingFlyDisc(),这个方法是子类特有的,pet就无法调用)
向下转型:对象与向下转型的类型相同
要用instanceof关键字判断类型
强制类型转换
主人可以为任何宠物看病,但只能和狗狗接飞盘,因此在断定宠物是狗狗之前不能和宠物玩飞盘,此时需要一个强制类型转换。Dog dog = (Dog)pet;dog.catchingflyDise();
4、接口
接口不可以被实例化
定义接口使用interface关键字、
实现接口使用implements关键字
接口可以多实现(一个类可以实现多个接口)用逗号分割接口不能被实例化
接口中的所有方法默认都是公共抽象方法接口的目的之一是订立一个标准
代码部分:
主类:
public class Computer implements CPU,EMS,HardDisk {
String brind;
String frquency;
String capacity;
String volum;
public Computer() {
}
public Computer(String brind, String frquency, String capacity, String volum) {
this.brind = brind;
this.frquency = frquency;
this.capacity = capacity;
this.volum = volum;
}
@Override
public void brind() {
System.out.println("品牌是:"+brind);
}
@Override
public void frequency() {
System.out.println("频率是:"+frquency);
}
@Override
public void capacity() {
System.out.println("硬盘容量是:"+capacity);
}
@Override
public void volum() {
System.out.println("内存容量是:"+volum);
}
}
三个接口:
public interface CPU {
void brind();
void frequency();
}
public interface EMS {
void capacity();
}
public interface HardDisk {
void volum();
}
测试类:
public class Test {
public static void main(String[] args) {
Computer computer = new Computer("Intel","3.8HZ","3000GB","4G");
computer.brind();
computer.frequency();
computer.capacity();
computer.volum();
}
}
程序结果:
品牌是:Intel
频率是:3.8HZ
硬盘容量是:3000GB
内存容量是:4G