Day04-21 继承

继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

  • extends的意思是“扩展”。子类是父类的扩展。

  • java中类只有单继承,没有多继承!

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。

  • 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。

//学生 is 人 :派生类/子类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person{
   //ctrl + H
}
//在java中,所有的类,都默认直接或间接继承Object
//Person 人 :父类
public class Person /*extends Object*/ {
}
public class Application {
   public static void main(String[] args) {

       Person person = new Person();
       person.getClass();
  }
}
  • 子类和父类之间,从意义上讲应该具有”is a”的关系

  • object类

  • super - this

super注意点:
  1、super是调用父类的构造方法,必须在构造方法的第一个
  2、super只能出现在子类的方法或者构造方法中
  3、super和this不能同时调用构造方法

this:
  代表的对象不同:
      this:本身调用者这个对象
      super:代表父类对象的应用
  前提:
      this:没有继承也可以使用
      super:只能在继承条件才可以使用
  构造方法
      this(); 本类的构造
      super(); 父类的构造
public class Application {
   public static void main(String[] args) {

       Student student = new Student();
       //student.test("梧桐");
       //student.test1();
  }
}
public class Person /*extends Object*/ {
   protected String name = "wt";

   public Person(String name) {
       System.out.println("Person无参执行了");
  }

   //私有的东西无法被继承!
   public void print(){
       System.out.println("person");
  }
}
public class Student extends Person {

   public Student() {
       //隐藏代码:默认调用了父类的无参构造
       super("name");//调用父类的构造器,必须要在子类的第一行
       System.out.println("Student无参执行了");
  }

   private String name = "wutong";

   public void print(){
       System.out.println("Student");
  }

   public void test1(){
       print();
       this.print();
       super.print();
  }

   public void test(String name){
       System.out.println(name);//梧桐
       System.out.println(this.name);//wutong
       System.out.println(super.name);//wt
  }
}
  • 方法重写

重写:需要有继承关系,子类重写父类的方法
   1、方法名必须相同
   2、参数列表必须相同
   3、修饰符:范围可以扩大:public > protected > default > private
   4、抛出的异常:范围,可以被缩小,但不可以扩大:ClassNotFoundExcpetion --> Exception(大)

重写,子类的方法和父类必须一致;方法体不同!

为什么需要重写:
   1、父类的功能子类不一定需要,或者不一定满足!
   alt + Insert : override;
import com.oop.demo05.A;
import com.oop.demo05.B;

public class Application {
   //静态方法和非静态的方法区别很大!
       //静态方法:   //方法的调用只和左边,定义的数据类型有关
   //非静态:重写
   public static void main(String[] args) {
       A a = new A();
       a.test();//A

       //父类的引用指向了子类
       B b = new A();//子类重写了父类的方法
       b.test();//B
  }
}
//继承
public class A extends B{

   //Override 重写
   @Override//注解:有功能的注释
   public void test() {
       System.out.println("A=>test()");
  }
}
//重写都是方法的重写,和属性无关
public class B {
   public void test(){
       System.out.println("B=>test()");
  }
}
 
posted @   二十二岁了还没有退休  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示