Day17-Java

面向对象

方法重写

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

    1. 方法名必须相同
    2. 参数列表列表必须相同
    3. 修饰符:范围可以扩大 public>protected>default>private
    4. 抛出的异常:范围可以被缩小,但不能扩大
  • 重写,子类和父类的方法名必须一致,方法体不同!

  • 为什么要重写:父类的功能,子类不一定需要,或者不一定满足

  • Alt+insert:override

package com.Kong.Oop.demo04;

public class A extends B {
    @Override//注解:有功能的注释
    public (static) void test() {
            System.out.println("A test");
    }
}
package com.Kong.Oop.demo04;

public class B {
    public (static) void test() {
        System.out.println("B test");
    }
}
package com.Kong.Oop;

import com.Kong.Oop.demo04.A;
import com.Kong.Oop.demo04.B;

public class Application  {

    //静态方法和非静态方法区别很大
    //静态方法  方法的调用只和左边定义的数据类型有关
    public static void main(String[] args) {

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

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

多态

  • 动态编译:类型,可拓展性
  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
  • 多态存在的条件
    • 有继承关系
    • 子类重写父类方法
    • 父类引用指向子类对象
  • 注意:
    • 多态是方法的多态,属性没有多态性
    • 类型转换异常,ClassCastException!
  • 无法重写的:
    • static 方法,属于类,不属于实例
    • final 常量
    • private方法
package com.Kong.Oop.demo05;

public class Student extends Person {
    @Override
    public void run() {
        System.out.println("son");
    }
    public  void eat(){
        System.out.println("eat");
    }
}
package com.Kong.Oop.demo05;

public class Person {
    public void run(){
        System.out.println("run");
    }
}
package com.Kong.Oop;

import com.Kong.Oop.demo05.Person;
import com.Kong.Oop.demo05.Student;

public class Application {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //可以指向的引用类型就不确定了:父类的引用指向子类

        //子类能调用的方法都是自己的或者继承父类的
        Student s = new Student();
        //父类可以指向子类,但是不能调用子类独有的方法
        Person p = new Student();
        Object o = new Student();

        //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
        s.run();
        p.run();//子类重写了父类的方法,执行了子类的方法
        s.eat();
        ((Student) p).eat();//强制转换,高转低
    }
}
posted @ 2026-05-10 22:07  小空谜  阅读(5)  评论(0)    收藏  举报