JAVA重写与多态问题
重写
概念
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大 ===> public > Protected > Default > private
- 抛出的异常:范围,可以被缩小,但是不能扩大
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");
}
结论
☆静态方法:方法的调用只和左边定义的数据类型有关!不会重写!(静态方法在类加载的时候就会调用)
☆非静态方法:重写!
多态
多态注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类之间要有联系
- 对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
- 多态存在的条件:继承关系,方法需要重写,父类引用指向子类对象
- 父类引用指向子类的对象
- 把子类转换为父类(向上转型),可直接转换
- 把父类转换为子类(向下转型),需要强制转换
好处
方便方法的调用,可减少重复的代码
例子
父类
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
}
}

浙公网安备 33010602011771号