Java 21——继承

继承

Java中类只有单继承,没有多继承!(一个儿子只有一个爸爸,一个爸爸可以有多个儿子)

继承关系的两个类。一个为子类,一个为父类。子类继承父类,使用关键字extends来表示。子类和父类事件,从意义上来讲应该具有“is a ”的关系。

Ctrl + H 打开继承树状图

super

注意点:

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

对比this:

  1. 代表的对象不同——this:本身调用者;super:代表父类对象的应用
  2. this:没有继承也可以使用;super:只能在继承条件下才能使用
  3. 构造方法——this()本类的构造;super()父类的构造
package com.oop.Day0317;  
/**  
 * 继承:人——父类  
 * 在java中所有的类,都直接或者间接默认继承object类  
 */  
public class People {  
  
    //这里要有有参构造的话,就要在子类中调用父类  
    public People(String name) {  
        System.out.println("People无参构造执行");  
    }  
  
    protected String name = "Usagi";  
  
    public void print(){  
        System.out.println("people");  
    }  
      
}
==================================================
package com.oop.Day0317;  
//子类继承父类,就会拥有父类的全部方法  
  
import com.oop.Day0314.Person;  
  
public class Student extends People {  
  
    public Student() {  
        //隐藏代码,默认调用了父类的无参构造  
        super("name");//隐藏的super,调用了父类的构造器必须要在子类构造器的第一行  
  
        System.out.println("Student无参构造执行");  
    }  
  
    private String name = "wusaqi";  
  
    public void print(){  
        System.out.println("student");  
    }  
  
    public void test1(){  
       print();  
       this.print();  
       super.print();  
  
    }  
  
    public void test(String name){  
        //方法里的name(形参name)  
        System.out.println(name);  
        //这个类里的name(wusaqi)  
        System.out.println(this.name);  
        //父类的name(乌萨奇)  
        System.out.println(super.name);  
  
    }  
  
    }

======================================================
package com.oop.Day0317;  
  
public class Application {  
    public static void main(String[] args) {  
        Student student = new Student();  
//       // student.test("乌萨奇");  
//        student.test1();  
  
    }  
}

方法的重写

重写都是和方法的重写,和方法无关

没有static时,b调用的是对象的方法,而b是用A类b new的;有static时,b调用了B类的方法,因为b是用b类定义的
因为静态方法是类的方法,非静态是对象的方法,即b是A new出来的对象,因此调用了A的方法

===================================================
package com.oop.Day0318;  
  
public class Application {  
  
    //静态的方法和非静态的方法区别很大  
    //静态方法  
    public static void main(String[] args) {  
        //方法的调用,只和定义的数据类型有关  
        A a = new A();  
        a.test();  
  
        //父类的引用指向了子类  
        B b = new A();//子类重写了父类的方法  
        b.test();  
    }  
}

==================================================
package com.oop.Day0318;  
  
public class A extends B{  
    //override重写  
    @Override//注解:有功能的注释  
    public void test() {  
        System.out.println("A => test()");  
    }  
}

====================================================
package com.oop.Day0318;  
//重写都是和方法的重写,和方法无关  
public class B {  
    public  void test(){  
        System.out.println("B=>test");  
    }  
  }
=====================================================

重写:需要有继承关系,子类重写父类的方法

  1. 方法名必须相同
  2. 参数列表必须相同(否则就变成重载了)
  3. 修饰符:范围可以扩大但不能缩小: private>protected>default>public
  4. 抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值