继承(二)

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 }
Dog类
 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 }
Pet父类
 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 }
测试类
原文地址:https://www.cnblogs.com/yang82/p/7041254.html