在面对对象的程序设计中,多态是继数据局抽象和继承之后的第三种基本特征 ----think in Java
多态是什么:
多态是一个程序中名称相同但是功能不同的方法,也可以称为一个名称的不同表现状态
多态的出现必伴随着以下两种情况
① 重载 : 在一个方法名称相同但是参数列表不同,即参数个数,类型,设计类型时要注意精度匹配的问题
② 覆盖 : 伴随继承出现,子类继承父类方法并对其覆盖
(方法名与参数列表是Java区别方法的依据)
向上转型:
由导出类向基类转型
public class main {
public static void main(String[] args) throws Exception{
son p = new son();
p.a();
}
}
class father{
public void a (){
System.out.println(\"hello i am father\");
}
}
class son extends father{
public void a(){
System.out.println(\"i am son\");
}
}
多态缺陷:域与静态方法
你可能觉得一切内容都可以有多态,但实际上不是这样的,如:
① 域 :
public class main {
public static void main(String[] args) throws Exception{
son p = new son();
p.a();
p.a2();
}
}
class father{
int a = 10;
public void a (){
System.out.println(\"hello i am father\");
}
}
class son extends father{
int a = 11;
public void a(){
System.out.println(\"i am son\"+a);
}
public void a2(){
System.out.println(\"i am son\"+super.a);
}
}
分析: 在继承中子类会从父类获得父类的所有属性,如a的值。当然你也可以在子类中重新定义一个a,此时子类中将存在2个a,一个为this.a一个为super.a,子类操作a时,会根据作用域由内向外查找a,如果不存在this.a则操作super.a 。但是在向上转型时,子类中的重定义的a无法影响到父类。
②:静态方法
public class main {
public static void main(String[] args) throws Exception{
father p = new son();
p.b();
}
}
class father{
public static int a = 1;
public static void b(){
System.out.println(\"father-\"+a);
}
}
class son extends father{
public static int a = 1;
public static void b(){
System.out.println(\"son-\"+a);
}
}
分析:静态方法是类的方法,可以被继承但是是无法被覆盖的,他与域有着相同的理解,即无法通过修改导出类从而引发基类的变化
向上转型只能改变父类中的非private,非static方法,本质是修改了父类中相应方法的引用地址,因此引发作用域的改变
继续阅读与本文标签相同的文章
上一篇 :
AI大咖们的18岁照,你能认对几个?
-
加速5G商业成功,华为5G设备全球发货超40万
2026-05-18栏目: 教程
-
如何看清新媒体行业过去和未来的红利?
2026-05-18栏目: 教程
-
阿里云独门绝技之无代理混合云数据库实时增量备份
2026-05-18栏目: 教程
-
外国网友惊叹中国5G公交:中国早已比我们想象的更好
2026-05-18栏目: 教程
-
Aliyun Serverless VSCode Extension v1.8.0 发布
2026-05-18栏目: 教程
