关于子类父类对象强制转换问题

子类对象可以赋值给父类对象;

子类包含的成员方法和成员变量 要比 父类的多;

子类包含父类的成员方法和成员变量;

对于类对象的强制转换,也就是说,必须先将子类定义的对象赋给父类定义的对象之后才能用子类强制转换 赋给 新的子类对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class AA{
     
    AA(){
        System.out.println("a");
    }
    void a1() {
        System.out.println("a1");
    }
}
 
class BB extends AA{
     
    BB(){
        System.out.println("b");
    }
    void b1() {
        System.out.println("a1");
    }
}
public class q {
  
   public static void main(String[] args) {
       BB b = new BB();
       AA a = new AA();
       a=b;
       BB c = (BB)a;
        
   }
}

 上面运行时正确的,如果子类定义的对象不赋给父类定义的对象的话,编译运行就会出现错误;

定义的对象没有相互联系起来,所以不能类强制转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package mytest;
 
import java.io.IOException;
 
 
class AA{
     
    AA(){
        System.out.println("a");
    }
    void a1() {
        System.out.println("a1");
    }
}
 
class BB extends AA{
     
    BB(){
        System.out.println("b");
    }
    void b1() {
        System.out.println("a1");
    }
}
public class q {
  
   public static void main(String[] args) {
       BB b = new BB();
       AA a = new AA();
      // a=b;
       BB c = (BB)a;
        
   }
}
 
 
aException in thread "main"
b
a
java.lang.ClassCastException: mytest.AA cannot be cast to mytest.BB
    at mytest.q.main(q.java:31)

 来源:http://www.cnblogs.com/xiaobo-Linux/

 

 

父类对象和子类对象引用同一个对象;

父类对象和子类对象所引用的空间内存是相同的;

子类对象可以赋值给父类对象;

 

posted @   zhaocundang  阅读(2331)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2015-10-24 SQLITE配置环境变量
点击右上角即可分享
微信分享提示