一、说明
继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
二、使用继承
- 先定义一个Animal类
class Animal extends Object{
String name = "动物";
String color;
int leg;
public Animal(String color,int leg){//有参构造
System.out.println(color+leg);
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
所有的类默认都继承Object类,可写可不写
- 定义一个Cat类并让他继承Animal类
Animal就是Cat的父类,Cat是Animal的子类
class Cat extends Animal{
//可写可不写
public Cat(String name,int leg){
super(name,leg); //默认系统加上,访问父类的空参构造
}
public void print_name(){
System.out.println(super.name);
}
public void eat(){
System.out.println("猫吃饭");
}
public void print_att(){
System.out.println("颜色:"+color+"..."+"leg数量:"+leg);
}
}
继承Animal父类以后可以在父类原有的功能上还可以加其他的功能,这就使得功能增加了,代码量也减少了。
- 在主函数中调用cat类访问父类的功能
public class Demo3_Extends {
public static void main(String[] args){
Cat c = new Cat("张三",15);//访问父类的有参构造
c.color = "black";//访问父类的color
c.leg = 4;//访问父类的leg
c.eat();//父类和子类中都有eat方法
c.sleep();//访问父类中的sleep方法
c.print_att();//打印颜色和数量
}
}
- 可以看到cat类中并没有定义color和leg但是它可以使用父类的属性
- 如果父类和子类有相同的方法会优先执行子类的,比如上图代码的eat(),它会执行子类的而不会执行父类的eat方法。当然也可以这么理解子类的eat()功能如果比父类的eat()功能强大那为什么还要父类的,就是这个意思,就相当于重写了父类的方法。