继承是面向对象三大特征之一,可以让类与类之间产生关系,其余两特征是封装和多态,在本章浅谈一下继承。
一、继承的概念、好处、格式?
1、继承的概念
即从已有的类(父类)中派生出新的类(子类),子类可以得到父类的属性和行为,在父类的基础上进行扩展。
2、继承的好处
可以将多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码的冗余,并且提高代码的复用性。
3、继承的格式
修饰符 class子类 extends 父类{ }
package dome;
public class Animal {
public void eat(){
System.out.println("吃东西");
}
public void sleep(String name){
System.out.println(name+"睡大觉");
}
}
package dome;
public class Dog extends Animal {
public void eat(){
System.out.println("小狗吃骨头!");
}
public void lookHome(){
System.out.println("小狗看家!");
}
}
package dome;
public class Cat extends Animal {
public void eat(){
System.out.println("小猫吃鱼!");
}
public void catchMouse(){
System.out.println("小猫抓老鼠!");
}
}
package dome;
public class Test {
public static void main(String[] args) {
//规范 实现
//创建对象并调用方法
//创建猫对象
Cat cat = new Cat();
cat.eat();
cat.sleep("cat");
cat.catchMouse();
System.out.println("-------------");
//创建狗对象;
Dog dog = new Dog();
dog.eat();
dog.sleep("dog");
dog.lookHome();
}
}
运行结果:
二、继承的特点
1、java只支持单继承,不支持多继承,可以多层继承
单继承:一个子类只能继承一个父类。
多继承:一个子类有多个父类,多继承可以通过接口的方式间接实现。
多层继承:子类A可以继承父类B,父类B可以继承父类C。(C是A的间接父类 )
2、每一个类都直接或者间接的的继承于Object类。
三、子类能继承父类中的哪些?
拿上面的代码举例:
在Animal类中新建私有的构造方法
package dome;
public class Animal {
public void eat(){
System.out.println("吃东西");
}
private void feed(){
System.out.println("吃点啥");
}//修饰符是private,只能在本类中使用
public void sleep(String name){
System.out.println(name+"睡大觉");
}
}
会进行报错
注意事项:
如果要显示调用父类中的构造方法,必须在子类的构造方法体中的第一行使用super()方法。该方法会调用父类相应的构造方法来完成子类对象初始化工作。
四、 顺序
在继承中,若子类重写了父类的方法
编译的时候,先看父类有无相应方法,没有就在子类中找
执行的时候,先看子类有无相应方法,没有就去父类中找