Day05-三大特性-继承

面向对象三大特性-继承

Day05-三大特性-继承

package com.oop;

import com.oop.demo05.Student;

public class Application {
    public static void main(String[] args) {

        Student student = new Student();
        student.say();
        System.out.println(student.getMoney());
    }
}
package com.oop.demo05;
//在Java中,所有的类,都默认直接或间接继承Object
//Person 人: 父类
public class Person /*extends Object*/{

    //public
    //protected
    //default
    //private
    private int money = 10_0000_0000;

    public void say(){
        System.out.println("说了一句话");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}
package com.oop.demo05;

//学生  is  人 :派生类,子类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person {

    //Ctrl + H 查看继承关系
}

package com.oop.demo05;

public class Teacher extends Person{
}

Super详解

注意点

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

Vs this:

- 代表的对象不同:

​ this:本身调用这个对象

​ super:代表父类对象的引用

- 前提:

​ this:没有继承也可以使用

​ super:只能在继承条件下才可以使用

- 构造方法:

​ this(); 本类的构造

​ super();父类的构造!

package com.oop;

import com.oop.demo05.Student;

public class Application {
    public static void main(String[] args) {

        Student student = new Student();
        student.test("秦疆");
        student.test1();
    }
}
package com.oop.demo05;
//在Java中,所有的类,都默认直接或间接继承Object
//Person 人: 父类
public class Person /*extends Object*/{

    //一个类最好要写上无参构造,如果不写无参构造,子类就调不了父类的无参构造
    public Person(){
        System.out.println("Person无参执行了");
    }

    protected String name = "kuangshen";

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

    //私有的东西可以被继承,但只能被本类访问
    private void print2(){
        System.out.println("Person");
    }
}
package com.oop.demo05;

//学生  is  人 :派生类,子类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person {

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

    private String name = "qinjiang";

    public void print(){
        System.out.println("Student");
    }
    public void test1(){
        print();//Student
        this.print();//Student
        super.print();//Person
    }

    public void test(String name){
        System.out.println(name);//秦疆
        System.out.println(this.name);//qinjiang
        System.out.println(super.name);//kuangshen
    }
}

方法重写(重点)

Day05-三大特性-继承

package com.oop;

import com.oop.demo05.A;
import com.oop.demo05.B;

public class Application {

    //静态方法和非静态的方法区别很大!
        //静态方法://方法的调用只和左边,定义的数据类型有关

    //非静态:重写(且要是public,不能是private私有)
    public static void main(String[] args) {


        A a = new A();
        a.test();//输出A

        //父类引用指向子类对象
        B b = new A();//子类重写了父类的方法
        b.test();//之前都加Static时输出B,都去掉static输出A

        /*(弹幕)
        b是A new出来的对象,因此调用了A的方法。因为静态方法是类的方法,而非静态是对象的方法

        刚开始没有重写A继承B的,所以B=>test();后来A重写了方法,就变成了A=>test()
         */

        /*
        重载是参数列表不同,本类的

        重写是子父类才有的,子类重写父类的方法
         */

    }
}
package com.oop.demo05;

//重写都是方法的重写,和属性无关
public class B {

     public static void test2() {
        System.out.println("A=>test()");
    }
    
    public  void test() {
        System.out.println("B=>test()");
    }
    
}
package com.oop.demo05;

//继承B
public class A extends B{

    public static void test2() {
        System.out.println("A=>test()");
    }
    
    //Override 重写
    @Override //注解:有功能的注释!
    public void test() {
        //super.test();//默认调用父类,我们可以重写自己的方法
        System.out.println("A=>test()");
    }
    
}

去掉static后,父类和子类的左边分别出现了o向上箭头和o向下箭头,这里的o代表重载

Day05-三大特性-继承

alt+insert键中选择Override Method重写方法

Day05-三大特性-继承

注意点

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

  1. 方法名必须相同
  2. 参数列表必须相同(负责变重载了)
  3. 修饰符:范围可以扩大但不能缩小:public > protected > default > private
  4. 抛出的异常:范围,可以被缩小但不能扩大;ClassNotFoundException类找不到异常---->Exception(大)

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

为什么需要重写:

  1. 父类的功能,子类不一定需要,或者不一定满足!

快捷键:

Alt+insert选中override

上一篇:B站狂神说Java基础_Day05数组


下一篇:day05_DQL查询表中的数据(分组查询丶连接查询)③