什么是继承?以及它的作用
如果现在有一个Dog(狗)类和Lion(狮子)类
public class Dog{
//属性
public String name; //名字
public int age;//年龄
public String strain;//品种
//方法
public void run(){}//跑
}
public class Lion{
public int age;//年龄
public String strain;//品种
//方法
public void run(){}//跑
public void hunt(){}//捕猎
}
其中两个类中 属性:年龄、品种和方法:跑 都有重复,不符合设计理念“低耦合高内聚”
那就可以使用继承来实现,它的作用就是为了减少代码重复率,增加复用性
继承的使用方法
为他们创建一个父类,用来写入共有的属性和方法
//定义一个Animal(动物)类
public class Animal{
//共有的属性
public int age;//年龄
public String strain;//品种
//共有的方法
public void run(){}//跑
}
然后只在子类(狗类和狮子类)中声明自己特有的属性和方法,使用extends关键词继承父类(动物类)
public class Dog extends Animal{
//特有的属性
public String name;//名字
//狗没有特有的方法
}
public class Lion extends Animal{
//这里狮子没有特有的属性
//特有的方法
public void hunt(){}//狩猎
}
这样子类就可以通过super关键字调用父类中的属性和方法啦
注意事项:
1.子类与父类必须符合“子类是一个父类”的逻辑关系
比如:苹果是一个水果,狗是一只动物,学生是一个人;
错误的是:水果是一个苹果?动物是一只狗?人是一个学生?
2.父类的私有属性和方法子类无权继承
父类的构造方法子类无权继承但可以调用
当父类与子类不在同一个包时,friendly(默认)权限的属性和方法无权继承
super关键字的用法
1.调用父类无参构造时,使用super();
调用父类有参构造时,使用super(参数);
注意:super在调用构造方法时必须处于方法体第一行
2.调用父类属性时,使用super.属性名;
3.调用父类方法时,使用super.方法名();