Java 继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

Java 子类强转父类

父类引用指向子类对象:

java中子类强转父类,实际上依然是子类;

该引用只能调用父类中定义的方法和变量;

如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;

// A是父类,B是子类
A a = new A();
a.setName("a1");
a.sayA(); // sayA

B b = new B();
b.setName("b1");
b.setSex(true);
b.sayA(); // sayA from B
b.sayB(); // sayB// Java中的对象进行类型提升,依然保持其原有的类型。
A a2 = (A) b; // 子类强转父类,其实仍然是子类
System.out.println(a2.toString()); // B [name=b1, age=0, sex=true]
// 该引用只能调用父类中定义的方法和变量;
// a2.sayB(); // The method sayB() is undefined for the type A 报错
// 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;
a2.sayA(); // sayA from B a2其实是B,调用的是B方法

Java 父类强转子类

只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.

// B b2 = (B) a; // atest.A cannot be cast to atest.B a是A,转不成B
// 只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.
B b2 = (B) a2; // a2其实是B,可以转成B
System.out.println(b2.toString()); // B [name=b1, sex=true]
b2.sayA(); // sayA from B
b2.sayB(); // sayB

扩展:

对于list也是这样

List<A> aList = new ArrayList<A>();
aList.add(a);
aList.add(b);
for (A item : aList) {System.out.println(item.getClass() + ":" + item.toString());// class atest.A:A [name=a1]// class atest.B:B [name=b1, sex=true]
}

附录:

  public class A {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void sayA() {System.out.println("sayA");}@Overridepublic String toString() {return "A [name=" + name + "]";}}public class B extends A {private boolean sex;public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}@Overridepublic void sayA() {System.out.println("sayA from B");// super.sayA();
        }public void sayB() {System.out.println("sayB");}@Overridepublic String toString() {return "B [name=" + this.getName() + ", sex=" + sex + "]";}}public static void main(String[] args) {// A是父类,B是子类A a = new A();a.setName("a1");a.sayA(); // sayA
B b = new B();b.setName("b1");b.setSex(true);b.sayA(); // sayA from Bb.sayB(); // sayB// Java中的对象进行类型提升,依然保持其原有的类型。A a2 = (A) b; // 子类强转父类,其实仍然是子类System.out.println(a2.toString()); // B [name=b1, sex=true]// 该引用只能调用父类中定义的方法和变量; // a2.sayB(); // The method sayB() is undefined for the type A 报错// 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;a2.sayA(); // sayA from B a2其实是B,调用的是B方法// B b2 = (B) a; // atest.A cannot be cast to atest.B a是A,转不成B// 只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.B b2 = (B) a2; // a2其实是B,可以转成BSystem.out.println(b2.toString()); // B [name=b1, sex=true]b2.sayA(); // sayA from Bb2.sayB(); // sayB
List<A> aList = new ArrayList<A>();aList.add(a);aList.add(b);for (A item : aList) {System.out.println(item.getClass() + ":" + item.toString());// class atest.A:A [name=a1]// class atest.B:B [name=b1, sex=true]
        }}

转载于:https://www.cnblogs.com/ooo0/p/9308583.html

java 子类强转父类 父类强转子类相关推荐

  1. java声明一个父类A,java 子类强转父类 父类强转子类

    1.基本数据类型 基本数据类型: 子类可以强转成父类,因为小范围可以强转大范围,不会有数据丢失. 父类也可以强转成子类,但是因为大范围强转成小范围,所以会有数据丢失. 2.Java 继承 继承就是子类 ...

  2. 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)

    当父类中声明某个函数为虚函数,并且子类重载了这个虚函数以后,用父类对象的指针可以调用子类的相应函数,但前提是该指针指向的对象是子类的对象,否则没有意义. 1.新建一个子类对象时,它首先执行它父类的构造 ...

  3. 类型转换异常,父类不能强转换成子类

    我们回到java角度上来, 总结一下: 1父对象=new 父类(); 2子对象=new 子类(); 3父对象=new 子类(); 4{ 父对象=new 子类(); 子对象=(子类)父对象; } 上述四 ...

  4. java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则

    Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...

  5. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗

    一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...

  6. Java继承-子类不可以继承父类的构造方法

    子类不可以继承父类的构造方法,只可以调用父类的构造方法. 子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句. super()表示子类在 ...

  7. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

  8. Java 中子类是否只继承父类的非私有变量和方法?

    今天在 CSDN 论坛中见到有人问在 Java 中子类是否只继承父类的非私有变量和方法(原贴在此).大部分跟贴都认为这句话是正确的,但是对于这个问题背后的本质理解却是错误的. 首先我们明确一下&quo ...

  9. java中子类与父类强制转换_java中父类强制转换成子类的错觉

    引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...

最新文章

  1. TensorRT 加速性能分析
  2. 不限制内存用桶排序PHP
  3. 我们应该使用什么指标来描述数据中心及其效率?
  4. 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记
  5. 怎么调试EXC_BAD_ACCESS错误
  6. 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...
  7. shell脚本拼接中间带空格的两个变量成一个变量
  8. Spring mvc 返回json格式 - 龙企阁 - 博客频道 - CSDN.NET
  9. maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
  10. JDK的问题:用C启动虚拟机跟java运行结果有差异
  11. 快压下载|快压软件官方下载
  12. 熬夜爆肝!C++实现圣域之战!(修过码)
  13. 柳州铁一中机器人_柳州铁路第一中学的办学成果
  14. html5多媒体事件写法,多媒体元素重要事件 -HTML5
  15. 【PyQt5,2021最新Java常用开源库总结
  16. 5个PPT素材、模板网站,建议收藏~
  17. 将AE开发的专题图制作功能发布为WPS
  18. 独此一次的跨界工作坊众筹:泛产品经理X苏杰X金沙浪
  19. 关于并行计算的相关总结
  20. R语言使用lm函数构建具有交互项的回归模型、使用:号(冒号)表示变量的交互(冒号为纯乘法、不包含乘法的构成项)

热门文章

  1. 《Groovy官方指南》目录
  2. 浅谈Spring框架注解的用法分析
  3. Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)
  4. Octave中无法使用rgb2gray()函数
  5. 用matlab实现感知机学习算法,训练分类器并解决井字游戏
  6. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
  7. 程序员面试题精选100题(50)-树的子结构[数据结构]
  8. 使用WMI对象收集计算机信息
  9. 和Facebook竞争,社交平台Mico怎样在1年内获得3000万用户?
  10. iOS开发UI基础—手写控件,frame,center和bounds属性