JAVA重写与多态问题

重写

概念

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

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大 ===> public > Protected > Default > private
  4. 抛出的异常:范围,可以被缩小,但是不能扩大

1. 静态方法的"重写"

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

//父类的引用指向了子类
B b = new A();//多态
b.test();//B
Class A extends B
public static void test(){
    System.out.println("A");
}

Class B
public static void test(){
    System.out.println("B");
}

2. 非静态方法的重写

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

//父类的引用指向了子类
B b = new A();//多态  子类重写了父类的方法
b.test();//A
Class A extends B
public void test(){
    System.out.println("A");
}

Class B
public void test(){
    System.out.println("B");
}

结论

☆静态方法:方法的调用只和左边定义的数据类型有关!不会重写!(静态方法在类加载的时候就会调用)
☆非静态方法:重写!

多态

多态注意事项

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类之间要有联系
  3. 对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
  4. 多态存在的条件:继承关系,方法需要重写,父类引用指向子类对象
  5. 父类引用指向子类的对象
  6. 把子类转换为父类(向上转型),可直接转换
  7. 把父类转换为子类(向下转型),需要强制转换

好处

方便方法的调用,可减少重复的代码

例子

父类
   public class Person {
    public void hello(){
        System.out.println("HelloWord!父类");
    }

    public void hello1(){
        System.out.println("HelloWord!父类1");
    }
}

子类
public class Man extends Person{
    public void hello(){
        System.out.println("HelloWord!子类");
    }

    public void hello2(){
        System.out.println("HelloWord!子类2");
    }
}

测试类
public class Demo {
    public static void main(String[] args) {
        Person man = new Man();
        Man man1 = new Man();
        man.hello();//HelloWord!子类  方法名与父类的方法相同 = > 重写
        man.hello1();//HelloWord!父类1  创建对象的左边是父类类型 可以调用父类的专属方法
        
        man1.hello2();//HelloWord!子类2  创建对象的左边是子类类型  可以调用子类的专属方法
        man1.hello();//HelloWord!子类
        man1.hello1();//HelloWord!父类1
    }
}
posted @ 2021-12-18 15:32  Indigo。  阅读(56)  评论(0)    收藏  举报