无名商城论坛

搜索
查看: 351|回复: 0

[其他技术] 【HC】转型对象(Java)

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 18:41:26 | 显示全部楼层 |阅读模式

定义如果A类继承自B类,即B为A的父类,那么当使用A的构造方法实例化一个B的对象时,所产生的b对象即为上转型对象。例:class B {}public class A extends B {         public static void main(String[] args) {  B b = new A(); }        }123456特点所谓上转,即范围小的类(子类)转为范围大的类(父类),所实例化的对象类型依然是父类,不过使用的是①父类构造方法 + ②子类构造方法所实例化的。此对象具有父类的属性与方法(非private声明的)以及子类重写(override)后的属性与方法(访问权限修饰符级别不能高于父类的),显然,此对象不能调用子类新增的方法。例:public class A extends B{  A(){  System.out.println("子类构造方法"); } public void Aprint() {  System.out.println("子类新增方法"); } public void Bprint() {  System.out.println("子类覆盖父类方法"); }  public static void main(String[] args) {  B b = new A();  b.Bprint();//编译正确  b.Aprint();//编译错误 }}class B { B(){  s = 1;  System.out.println("父类构造方法"); } public void Bprint() {  System.out.println("子类新增方法"); }}12345678910111213141516171819202122232425输出结果:父类构造方法子类构造方法子类覆盖父类方法123应用public class Person { public void mine() {   System.out.println("我是一个人"); } public static void main(String[] args) {  Person per1 = new Chinese();  Person per2 = new Korean();  Person per3 = new Thai();  Person per4 = new American();  per1.mine();  per2.mine();  per3.mine();  per4.mine(); }} class Chinese extends Person { public void mine() {  System.out.println("我是中国人"); }}class Korean extends Person { public void mine() {  System.out.println("我是韩国人"); }}class Thai extends Person { public void mine() {  System.out.println("我是泰国人"); }}class American extends Person { public void mine() {  System.out.println("我是美国人"); }}12345678910111213141516171819202122232425262728293031323334输出结果:我是中国人我是韩国人我是泰国人我是美国人1234介绍:虚拟方法调用(多态情况下) 子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。
前提: Person类中定义了mine()方法,各个子类重写了mine()。执行: 多态的情况下,调用对象的mine()方法, 实际执行的是子类重写的方法。如有不正,欢迎批评指出。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表