Java基础七
extends关键字
在Java中,通过关键词extends继承一个已有类的所有属性和方法(除了private修饰的属性和方法),被继承的类被称为父类或是基类,新的类称为子类或是派生类,在Java中不允许多继承,所以一个子类只能继承一个父类,但是一个父类可以被多个子类继承。
Java支持多重继承
class A{}
class B extends A{}
class C extends B{}
super关键字
super关键字代表当前子类的父类,在实现子类的时候,必须把调用父类构造方法的super语句必须放在第一行,若是子类没有显示的调用父类的构造方法,系统则默认子类调用父类的无参构造方法,若父类没有无参构造方法,则会报错。
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
}
}
多态
多态存在的三个必要条件:
-
要有继承
-
要有重写
-
父类引用指向子类对象
在三个条件满足的情况下,当调用父类里被重写的方法时,在实际中,new哪个子类对象就调用哪个子类对象中的方法
class Animal{ private String name; Animal(String name){ this.name=name; } public void enjoy(){ System.out.println("叫声"); } } class Cat extends Animal{ private String eyescolor; Cat(String n,String c){ super(n); eyescolor=c; } public void enjoy(){ System.out.println("猫叫"); } } class Dog extends Animal{ private String furcolor; Dog(String n,String c){ super(n); furcolor=c; } public void enjoy(){ System.out.println("狗叫"); } } class Lady{ private String name; private Animal pet; Lady(String name,Animal pet(pet只能看见指向对象中和Animal中相同名字的方法,所以在此例中能调用enjoy方法)){ this.name=name; this.pet=pet; } public void myPetEnjoy(){ pet.enjoy(); } } public class TestAnimal { public static void main(String[] args){ Cat c=new Cat("kiko","black"); Dog d=new Dog("apple","brown"); Lady l=new Lady("Miranda",c); Lady l2=new Lady("l1",d); l.myPetEnjoy(); l2.myPetEnjoy(); } }