继承的概念
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承特点
1)Java只支持单继承,不支持多继承。
2)Java支持多层继承(继承体系)
3)父类构造函数不能继承,父类的属性和方法都可以继承。
4)把多个类中的相同的属性和行为进行抽取,封装到一个类中,然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可。
5)类与类之间要有所属( ” is a ” )关系,xx1是xx2的一种。
6)任何类都直接或者间接的继承自Object,但是没有显式化给出声明。
eg:如何验证?
因为继承后有父类的方法,则可以直接使用自己定义的类,调用object提供的方法
public String toString()
为什么需要继承
好处:
1)提高代码的复用性。
2)让类与类之间产生了一个关系,是多态的前提。
接下来我们通过实例来说明这个需求。
开发动物类,其中动物分别为猫以及狗,要求如下:
猫和狗继承了动物的属性name,通过有参构造函数进行属性传值
猫:属性(姓名),方法(叫)
狗:属性(姓名),方法(叫)
package com.yuhui.a7;
public class Animal {
protected String name = "";
protected int shoutNum = 5;
//父类无参构造函数
public Animal() {
this.name = "无名";
}
//父类有参构造函数
public Animal(String name) {
this.name = name;
}
public int ShouNum(int num){
if(num <= shoutNum ){
return shoutNum = num;
}else{
return shoutNum;
}
}
public String Shout(){
StringBuffer result = new StringBuffer();
for(int i= 0 ;i < shoutNum;i++ ){
result.append(" , ");
}
return "我的名字叫"+name +" "+ result;
}
}
package com.yuhui.a7;
class Cat extends Animal{
public Cat() {}
public Cat(String name) {super.name = name;}
//复写父类Shout()方法
public String Shout(){
StringBuffer result = new StringBuffer();
for(int i= 0 ;i <shoutNum;i++ ){
result.append(" , 喵");
}
return "我的名字叫"+name +" "+ result;
}
public static void main(String[] args) {
Cat cat = new Cat("小花猫");
new Animal().shoutNum = 10;
System.out.println(cat.Shout());
}
}
执行结果 : 我的名字叫小花猫 , 喵 , 喵 , 喵 , 喵 , 喵
package com.yuhui.a7;
public class Dog extends Animal{
public Dog() {}
public Dog(String name) {super.name = name;}
//复写父类Shout()方法
public String Shout(){
StringBuffer result = new StringBuffer();
for(int i= 0 ;i <shoutNum;i++ ){
result.append(" , 汪");
}
return "我的名字叫"+name +" "+ result;
}
public static void main(String[] args) {
Dog dog = new Dog("史路比");
new Animal().shoutNum = 10;
System.out.println(dog.Shout());
}
}
执行结果:我的名字叫史路比 , 汪 , 汪 , 汪 , 汪 , 汪