1.继承(extends)
1.1 继承:遗传
1.2 语法
public class 子类 extends 父类{
}
public class Dog extends Pet{
}
1 public class Pet { 2 private String name = "无名氏"; 3 private int health = 90; 4 private int love = 0; 5 public Pet(){ 6 this.health = 95; 7 System.out.println("执行宠物的无参构造方法"); 8 } 9 public Pet(String name){10 this.name = name;11 }12 public String getName(){13 return name;14 }15 public int getHealth(){16 return health;17 }18 public int getLove(){19 return love;20 }21 public void ji(){22 System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health23 +",和主人的亲密度是"+this.love+"。");24 }25 }
1 public class Dog extends Pet{ 2 private String strain; 3 public Dog(String name,String strain){ 4 //super(name); 5 this.strain = strain; 6 } 7 public String getStrain(){ 8 return strain; 9 }10 public void ji(){11 super.ji();12 System.out.println("我是一只"+this.strain);13 }14 }
1 /* 2 * 继承语法 3 * 修饰符 SubClass extends SuperClass{ 4 * 类定义部分 5 * } 6 * 继承通过extends关键字来实现,其中SubClass为子类,SuperClass为父类 7 * 修饰符如果是public,则该类在整个项目中可见,若无public修饰符,则该类只在当前包可见 8 * 不可以使用private和protected修饰类 9 */10 public class Penguin extends Pet {11 private String sex;12 //final String home = "南极";13 // public void setHome(String home){14 // this.home = home; // home不可以再次赋值15 // }16 public Penguin(String name,String sex){17 super(name);18 this.sex = sex;19 } 20 public String getSex(){21 return sex;22 }23 public void ji(){24 super.ji();25 System.out.println("性别是:"+this.sex);26 }27 }
1 /* 2 * 方法的重写 3 * 在子类中可以根据需求对父类继承的方法进行重新编写 4 * 要求:重写方法和别重写方法必须具有相同的方法名 5 * 必须具有相同的参数列表 6 * 重写方法的返回值类型必须和被重写方法的返回值类型相同 7 * 重写方法不能缩小被重写方法的访问权限 8 */ 9 public class TextDPP {10 public static void main(String[] args){11 Pet pet = new Pet("吉吉");12 pet.ji();13 Dog dog = new Dog("狗狗","雪狼");14 dog.ji();15 Penguin pgn = new Penguin("胖胖","Q妹");16 pgn.ji();17 }18 }
运行结果为:
1.3 继承的特点
a.子类可以继承父类的非尸用的属性和方法
b.不能继承构造方法
c.继承默认权限修饰符的方法和属性,子类和父类必需在同一包中
1.4 super(父类)
super.属性名//表示方法父类的属性
super.方法名(参数);//表示访问父类的方法
super.(参数);//表示访问父类的构造函数
注意: super()访问父类构造函数时,必须写在第一行
注意:代码块会执行在构造函数之前
2.重写
2.1 重写就是子类重写定义父类的方法
2.2 重写规则
a.方法名和参数列表相同
b.修饰符访问权限子类和父类相同或者比父类大
c.返回值类型子类和父类相同(或者是父类返回值类型的子类)
d.异常跟父类相同或者范围更小
一般:重写时,子类的东西都要和父类保持一致
构造方法不能被重写
因为不能被继承所以不能被重写
3.抽象类
3.2.抽象方法
语法:public abstract 返回值类型 方法名(参数列表);
例:public abstract void print();
注意:抽象方法有abstract修饰,并且抽象方法没有方法体
1 public class Fish extends Animal{2 int weight = 5;3 int age = 9;4 public void info(){5 System.out.println("我是一只"+weight+"的鱼!");6 System.out.println("今年"+age+"岁了!");7 }8 9 }
1 public abstract class Animal {2 int age;3 String color = "";4 int weight;5 abstract void info(); //抽象这个方法让子类去实现6 }
1 public class Bird extends Animal{2 String color="红色";3 int age = 4;4 public void info(){5 System.out.println("我是一只"+color+"的鸟!");6 System.out.println("今年"+age+"岁了!");7 }8 9 }
1 public class TextBFA {2 public static void main(String[] args){3 Bird b= new Bird();4 b.info();5 Fish f = new Fish();6 f.info();7 }8 }
运行结果为:
4.抽象类和抽象方法的特点
a.都用abstract修饰
b.抽象类不能实例化
并且继承抽象类的子类都必须重写抽象类的所有抽象方法
注意:1)抽象类中不一定有抽象方法
2)含有抽象方法中的类,一定是抽象类(接口)