继承的优势:
1.可以减少代码的重复率
2.关键字:extends (c#::)
3.super:指代父类的对象 this:指代当前对象
比如创建一个宠物类,宠物有猫、狗、小猪……
我们可以把宠物们共有的属性单独提取出来一个类
public class Pet{ //定义宠物共有的属性 private String name;//宠物姓名 private int health;//宠物健康值 private double weight;//体重…… } //定义set和get访问器 public String getName() { return name; } public int getIove() { return love; } public int getHealth() { return health; } //定义无参 public Pet(){ System.out.println("这是父类的无参构造!"); } public Pet(String name){ this.name=name; } //定义带参 public Pet(String name, int love, int health) { this(name); //this.name = name; this.love =love; this.health = health; } //定义方法 public void print(){ System.out.println("姓名:{0},爱心值:{1},健康值: {2}"+this.name+this.love+this.health); }定义子类特有的属性
ps:super关键字的含义:
1.调用父类的属性、方法、构造
调用属性:super.name;
调用方法:super.方法名();
调用构造:super();无参 super(带参参数);
public class Dog extends Pet{//子类 继承 父类 //定义特有的属性 private String strain;//品种 //定义s和g public String getStrain() { return strain; } //定义无参 public Dog(){} //定义带参 public Dog(String strain,String name,int love,int health) { super(name,love,health); this.strain = strain; } //定义业务方法 public void cs(){ //调用父类的属性进行输出 super.getIove(); System.out.println(super.name); System.out.println(super.health); } } public class Cat extends Pet { //属性 private String sex; //g和s访问器 public String getSex() { return sex; } //无参 public Penguin(){} //带参 public Penguin(String sex) { super(); this.sex = sex; } //方法 public void show(){ System.out.println("我的性别是"+this.sex); } }4.this super调用构造时必须位于代码第一行
两者不能在同一个构造中出现
两者不能在同一个方法中出现
//带参 public Penguin(String sex) { super(); this.health;//代码会报错 this.sex=sex;//不会报错 }5.子类不可以继承父类的东西
private修饰的成员
构造函数(可以使用 不可以继承)
不在同一个包下、使用默认权限的成员
6.继承的初始化顺序:先父类再子类
ps:除非在子类中使用super调用父类的带参构造
…………下次写抽象类 88
