继承,Super,方法重写

继承

*继承的本质是对某一批类的抽象,从而实现对实现世界更好的建模
*extends的意思就是‘扩展’,子类是父类的扩展。
*java中类只有单继承没有多继承,一个父可以扩展多个子 一个子不可以继承多个父

`

package com.oop.Demo05;
//父类
//java中 所有的类,都默认直接或者简介继承Object
public class Person{
public void say(){
    System.out.println("法律框架");
}
private int money=10_0000_0000;

public int getMoney() {
    return money;
}

public void setMoney(int money) {
    this.money = money;
}

}

`

`

package com.oop.Demo05;
//子类
public class Student extends Person{

}

`

`

    public static void main(String[] args) {
    Student student = new Student();
    student.say();
    System.out.println(student.getMoney());


  }

`

Super

`

super注意点
     1.super调用父类的构造方法,必须在构造方法的第一个
     2.super必须只能出现在子类的方法过着构造方法中!
     3.super和this 不能同时调用构造方法
this:
   代表的对象不同
       this:本身调用这这个对象
       super:代表父类对象的应用
   前提
       this:没有继承也没有使用
       super:只能在继承条件下才可以使用
   构造方法
       this():本类的构造
       super():父类的构造

`

`

//父类
public Person() {
    System.out.println("Person无参执行");
}

protected String name = "shangyu";
public void print(){
    System.out.println("Person");
}

`

`

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

private String name="my";

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

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

public void test(String name){
    System.out.println(name);
    System.out.println(this.name);
    System.out.println(super.name);
}

`

`

//测试类
public static void main(String[] args) {
    Student student = new Student();
    student.test1("世界");
    //student.test();
}

`

方法重写

`

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

为什么需要从写:
     1.父类的功能,子类不一定需要,或者不一定满足;
     alt+Insert:override;

`

`

//父类
public static void test(){
    System.out.println("B=>test");
}

//子类
public static void test(){
    System.out.println("A=>test");
}

//测试类
    //方法的的调用只和左边有关,定义的数据类型有关
    A a = new A();
    a.test();  //A

    //父类引用指向了子类
    B b = new A();
    b.test();  //B

`


`

//父类
public void test(){
    System.out.println("B=>test");
}

//子类
//重写
@Override
public void test() {
    System.out.println("A=>test");
}

//测试类
    //方法的的调用只和左边有关,定义的数据类型有关
    A a = new A();
    a.test();  //A

    //父类引用指向了子类
    B b = new A();
    b.test();  //B
}

`

posted @ 2021-05-26 14:45  mr42  阅读(108)  评论(0)    收藏  举报