1.继承(extends)
1.1继承:遗传
1.2语法:
public class 子类 extends 父类{
}
eg:
public class Dog extends Pet{
}
1.3继承的特点
a.子类可以继承父类的非私有的属性和方法
b.不能继承构造方法
c.继承默认权限修饰符的方法和属性,子类和父类必须在同一包中
1.4super(父类)
super.属性名 //表示访问父类的属性
super.方法名(参数) //表示访问父类的方法
super(参数) //表示访问父类的构造方法
注意:super()访问父类构造函数时,必须写在第一行
1.5访问修饰符总结
访问修饰符 本类 同包 子类 其他
private 私有的 #
默认(friendly) # #
protected 受保护的 # # #
public 公共的 # # # #
2.抽象类(abstract)
2.1 抽象类
语法:public abstract class 类名{};
2.2抽象方法
语法:public abstract 返回值类型 方法名(参数列表)
eg:public abstract void print();
注意:抽象方法有abstract修饰,并且抽象方法没有方法体
2.3抽象类和抽象方法的特点
a.都用abstract修饰
b.抽象方法没有方法体
c.抽象类不能实例化,并且继承抽象类的子类都必须重写抽象类中的所有抽象方法
注意:
a.抽象类中不一定有抽象方法
b.含有抽象方法的类,一定是抽象类(接口)
3.重写
3.1重写就是子类重写定义父类的方法
3.2重写规则
a.方法名和参数列表相同
b.修饰符访问权限子类和父类相同或者比父类大
c.返回值类型子类和父类相同(或者是父类的返回值类型的子类)
d.异常跟父类相同或者范围更小
一般:重写时,子类的东西都要与父类保持一致
3.3方法重载与方法重写的区别
位置 方法名 参数表 返回值 访问修饰符
方法重写 子类 相同 相同 相同或者其子类 不能比父类更严格
方法重载 同类 相同 不相同 无关 无关
方法重写时子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同(或者其子类)、访问修饰符不能严于父类方法重载是同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型、访问修饰符无关
4.final
final修饰的类不能被继承
final修饰的方法不能重写
final修饰的属性不能被修改
运行结果:
1 package Day08; 2 3 public class Dog extends Pet{ 4 private int strain; 5 6 public Dog() { 7 8 } 9 public Dog(int strain) { 10 super(); 11 this.strain=strain; 12 } 13 //打印宠物的所有信息 14 public void print(){ 15 System.out.println("姓名:"+getName()+"品种:"+strain); 16 } 17 public int getStrain() { 18 return strain; 19 } 20 public void setStrain(int strain) { 21 this.strain = strain; 22 } 23 24 25 26 }
1 package Day08; 2 3 public abstract class Pet { 4 private int age; //年龄 5 private String name; //昵称 6 private int health; //健康值 7 private int love; //亲密度 8 public Pet() { 9 10 } 11 //规约 12 public abstract void print(); 13 14 // //打印信息 15 // public void print(){ 16 // System.out.println("名字:"+this.name+",年龄:"+this.age+",健康值:"+this.health+",亲密度:"+this.love); 17 // } 18 19 public int getAge() { 20 return age; 21 } 22 public void setAge(int age) { 23 this.age = age; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public int getHealth() { 32 return health; 33 } 34 public void setHealth(int health) { 35 this.health = health; 36 } 37 public int getLove() { 38 return love; 39 } 40 public void setLove(int love) { 41 this.love = love; 42 } 43 44 }
1 package Day08; 2 3 public class Test { 4 public static void main(String[] args) { 5 //Pet pet=new Pet(); 6 Dog d=new Dog(); 7 d.setName("hh"); 8 d.setStrain(1); 9 d.print(); 10 } 11 }