JAVA学习day03

一、Super详解

Person.java

    protected String name = "人类";

Student.java

    private String name = "学生";

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

Test.java

    public static void main(String[] args) {
        Student student = new Student();
        student.test("HF");
    }
输出:
HF
学生
人类

注:

  • 用super也可以调用父类的方法
  • 实例化子类时会自动调用super()对父类进行实例化,如果手写,必须在第一行。
  • Super和This不能同时调用构造方法。

二、方法重写和多态

Static:Static是类的方法;没有Static,方法是实例化了的对象的方法!!!

Test1:

B.java

public class B{
  public static void test(){
  System.out.println("B=>Test()")
  }
}

A.java

public class A extends B{
  public static void test(){
  System.out.println("A=>Test()")
  }
}

Application.java

public class Application() {
    public static void main(String[] args) {
        A a = new A();

        a.test();

        B b = new A();
        b.test();

    }
}

此时输出为:
A=>test()
B=>test()

Test2:

B.java

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

A.java

public class A extends B{

    @Override
    
    public void test() {
        System.out.println("A=>test()");
    }
}

Application.java

public static void main(String[] args) {
        A a = new A();

        a.test();

        B b = new A();
        b.test();

    }

此时输出为:
A=>test()
A=>test()

总结:

  1. 多态
    b属于B类,但是是用A new的对象,所以当test()都为static时,b.test()调用的是类的对象,所以结果为B=>test() ;当test()被重写之后,调用的是对象的方法,因为是A new出来的对象,所以结果为A=>test()
  2. 方法重写
  • 方法名必须相同
  • 参数列表必须相同
  • 修饰符:范围可以扩大但不能缩小: Public>Protected>Default>Private
  • 抛出的异常:范围,可以被缩小,但不能被扩大:ClassNotFoundException --> Exception(大)

为什么需要重写?

  • 父类功能,子类不一定需要,或者不一定满足!
原文地址:https://www.cnblogs.com/ebym/p/15651033.html