(java)类的继承

class Person{
...
}
class Student extends Person{
..
}

这是java类的继承的基本格式。(class 子类名 extends 父类名{}

概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类只要继承那个类即可。

好处:1.提高了代码的复用性。

         2.提高了代码的维护性。

         3.让类与类之间产生了关系,是多态的前提。

弊端:耦合性增强,打破了封装性。

特点:只支持单继承,不支持多继承,支持多层继承。

注意事项:1.子类只能继承父类所有非私有的成员。

               2.子类不能继承父类的构造方法,可以通过super关键字去访问。

               3.不要为了部分功能而去继承。

采用继承的情况:体现“is a ”的关系。如:桃子是水果。

继承中成员变量的关系:当父类与子类成员变量名称一样时。

                               在子类中访问一个变量的查找顺序:

                                 子类方法的局部范围——子类成员——父类成员——找不到报错

this和super的 使用

定义:

      this:代表本类对应的引用

      super:代表父类存储空间的标识(父类引用)

使用:

     1.调用成员变量

             this.成员变量(成员方法)     调用本类的成员变量(成员方法)

             super.成员变量(成员方法)   调用父类的成员变量(成员方法)

      2.调用构造方法

              this(...)调用本类的构造方法

              super(...)调用父类的构造方法

继承中构造方法的关系:

1.子类中所有构造方法都默认访问父类中的无参构造方法

      原因:因为子类会继承父类中的数据,可能还会使用父类的数据。

注意:每个子类默认的每一个构造方法的第一条语句都是super();

2.子父类的初始化:(分层初始化)先初始化父类数据,再初始化化子类数据。

方法重写:

class Phone{
  public void call(String name)
    {
      System.out.printIn("call"+name);
    }
}
public NewPhone:Phone{
     public void call(String name)
    {
      super.call(name);
      System.out.printIn("可以听音乐了“);
    }
}
class Test{
    public static void main(String []args){
    NewPhone n=new NewPhone();
    n.call("yyy");
   }
}

运行结果:call yyy

              可以听音乐了

注意事项:1.父类中的私有方法不能被重写

               2.子类重写父类方法时,访问权限不能更低。

               子类重写父类方法时最好一模一样。

案例:

class Person{
   private String name;
   private int age;
   public Person(String n,int a){
        name=n;
        age=a;
    }
   public String getName(){
     return name;
    }
   public void setName(String s){
       name=s;
    }
   public int getAge(){
     return age;
   }
   public void setAge(int a){
      age=a;
   }
}
class Student extends Person{
    public Student(){}
    public Student(String name,int age){
     super(name,age);
    }
}
class Teacher extends Person{
...
}
class Test{
   public static void main(String []args){
  Student s1=new Student();
  s1.setName("yyy");
  s1.setAge(20);
 System.out.println(s1.getName+s1.getAge);
   }
}



猜你喜欢

转载自blog.csdn.net/qq_41679818/article/details/80759865
今日推荐