继承

继承

继承又分子类(派生类)和父类(基类),子类通过extends关键字来继承父类的所有特性,且可以在此基础上增加自身的特性。一个子类只能有一个父类,但一个父类可以有多个子类。继承是类与类之间的关系

package oop.demo04;

public class Demo01 extends Application{
}

这样Demo01就为子类,通过extends继承了父类Application的所有属性。

 

需要注意!!在父类中如果有private的私有属性,子类则不能继承这个属性,只可以通过get/set来获得使用权限。

在java中,存在着一个Object的隐藏类,所有类都默认直接或间接的继承了这个类,比如String类这些系统里的类都继承了Object类。可以通过ctrl + H来查看类的继承关系。Object类代表了一个类的初始化功能。

super关键字

在继承中,除了extends的继承关键字,还有一个super调用的关键字。

1. super与this近似,this代表调用当前类的方法,super代表调用当前这个类的父类的方法。但如果父类的方法是private的私有属性,则super也不能调用。

2. 在继承关系中,子类的构造器内又包含了一个隐藏的super(); ,代表这个子类构造器中,默认将父类构造器一起调用了

3. 在构造器中,super与this都是只能放在第一个,先执行。所以证明在构造器中,不能同时调用子类和父类,只能选择其中一个进行调用。

父类无参构造

package oop.demo04;

public class Application {
  public Application() {
      System.out.println("父类无参构造");
  }
}

子类无参构造

package oop.demo04;

public class Demo01 extends Application{
  public Demo01() {
      System.out.println("子类无参构造");
  }
}

测试类

package oop.demo04;

public class Demo02 {
  public static void main(String[] args) {
      Demo01 demo01 = new Demo01();
  }/*输出后结果为 父类无参构造
                子类无参构造
                */
}

因为创建对象的本质就是在调用构造器,所以在测试类创建子类对象,就相当于调用了子类的构造器。

由此得出: 子类的构造器中,默认生成了一个super();来调用父类构造器,且这个super();排在最上面,第一个输出。

快捷键为 alt + Ins

 

方法重写

重写 Override                idea快捷键 Ctrl + O     eclipse快捷键 Alt + / 

方法的重写是由子类改变父类的静态方法

如何重写:由子类输出一个和父类的静态方法一模一样的静态方法,此时子类的静态方法默认会输出父类的这个静态方法。而在子类中的这个静态方法中写入其他属性,就可以更改此次的父类方法结果。这就是方法的重写

父类静态方法

package oop.demo04;

public class Application {
public void ii() {//静态方法
   System.out.println("父类");
  }
}

子类静态方法

package oop.demo04;

public class Demo01 extends Application{
   public void ii(){//静态方法
       System.out.println("子类");
  }
}

测试类

package oop.demo04;

public class Demo02 {
   public static void main(String[] args) {
       Demo01 demo01 = new Demo01();//输出Demo01的静态方法结果
       demo01.ii();

       Application application = new Demo01();//输出Application的静态方法结果
       application.ii();
  }
}//得出结果   子类

方法重写注意事项!!

  1. 所需重写的类之间必须为继承关系

  2. 方法必须为静态方法

  3. 方法名必须相同

  4. 参数列表必须相同

  5. 修饰符:范围可以扩大但不能缩小 public>protected>default> private

  6. 抛出异常:范围可以被缩小,但不能扩大

重写!子类的方法必须要与父类的方法一致,但方法体不同。

为什么要重写?

父类的功能,子类不一定需要或满足,所以需要重新写一个。

 

原文地址:https://www.cnblogs.com/jinweichaoyouqu/p/13963908.html