Java多态性
程序员文章站
2024-03-21 18:49:46
...
面向对象的特征之三:多态性
一、理解
可以理解为一个事物的多种形态
二、何为多态性
父类的引用指向子类的对象(或子类的对象赋给父类的引用)
三、多态性的使用:虚拟方法的使用
有了对象的多态性以后,我们在编译期,只能调用父类中的声明,我们实际执行的是子类重写父类的方法
总结:编译:看左边;运行:看右边
四、多态性的使用前提
- 类的继承关系
- 要有重写的方法
注意:对象的多态性只适用于方法,不适用于属性
属性:编译和运行都看左边
多态性运行时行为
package com.atguigu.java;
public class Person {
String name;
int age;
int id = 1001;
public void eat() {
System.out.println("人:吃饭");
}
public void walk() {
System.out.println("人:走路");
}
}
package com.atguigu.java;
public class Man extends Person {
boolean isSmoking;
int id = 1002;
public void earnMoney() {
System.out.println("男人负责挣钱养家");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("男人多吃,长肌肉");
}
@Override
public void walk() {
// TODO Auto-generated method stub
System.out.println("男人霸气的走路");
}
}
package com.atguigu.java;
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.eat();
Man man = new Man();
man.eat();
man.age = 25;
man.earnMoney();
//*************************************
//对象的多态性:父类的引用指向子类的对象
Person p2 = new Man();
//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法
//虚拟方法的使用
p2.eat();
p2.walk();
System.out.println(p2.id);
//The method earnMoney() is undefined for the type Person
// p2.earnMoney();
// Person p3 = new Woman();
}
}
面试题
package com.atguigu.exer;
public class InterviewTest {
public static void main(String[] args) {
Base base = new Sub();
base.add(1,2,3);//??????
Sub s = (Sub)base;
s.add(1, 2, 3);//????
}
}
class Base{
public void add(int a,int... arr) {
System.out.println("base");
}
}
class Sub extends Base{
public void add(int a,int[] arr) {
System.out.println("sub_1");
}
public void add(int a, int b, int c) {
System.out.println("sub_2");
}
}
第一个add函数输出sub_1
因为多态性的方法看右边
参数中…arr和[] arr不能同时出现,因为编译器认为这两个对象一样,所以是重写
多态只能调用父类中有的方法,add(int a, int b, int c)在父类中根本就没有
第二个add函数输出sub_2
因为强转后调用的是sub的方法,确定参数的方法优先于[] arr和… arr
推荐阅读
-
Java多态性
-
java 可变参数--传数组(转) 博客分类: java细节 java可变参数
-
java override 协变返回类型 博客分类: JAVA 协变覆盖
-
rocketmq-一个消费组对应一个订阅关系 博客分类: java细节 rocketmq
-
java.sql.SQLException: Parameter index out of range (1 > number of parameters, w 博客分类: java细节
-
字符串转数字 博客分类: java细节 转数字
-
java.sql.SQLException: Unknown system variable ’tx_isolation‘
-
java泛型总结2-2 面试题总结 博客分类: java泛型 泛型面试题协变逆变java限定通配符和非限定通配符
-
MySQL——Caused by: java.sql.SQLException: Unknown system variable ‘transaction_isolation‘
-
Java自学之路-Java基础教程-9:Java的变量类型-8种基本类型和3种引用类型