在java当中,父类对象不能强转为子类对象,子类可以转为父类。
道理是这样的:
从哲学角度来说:
一个男人肯定是人,一个人却不一定是男人。
人是一个父类,一个男人继承自人;
结论1:男人是人
结论2:人是男人
显然结论1是正确的。
所以从技术的角度来说:java当中子类可以强转为父类,但是父类不能强转为子类也就是符合这个基本的自然道理。
其次,当下结论男人是人的时候,在java当中,也即将男人强转为人,那么这个时候男人就会丢失自己本身特有的属性,而只具备人的属性;也即当子类强转为父类时,只具备父类当中的属性,自己特有的属性会丢失。
java当中的instanceof 关键字可以判断某个类是否是某个类的实例
记住一点:在构造子类时,一定会调用到父类的构造方法。
所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。
如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的构造。
今天写了几句代码如下:
public class MainClass {
public static void main(String[] args) {
Parent p = new Children();
p.test();
}
}
class Parent{
public void test(){}
}
class Children extends Parent{
}
Parent p = new Children();
这句代码当时有点想不明白,总感觉是父类被强制成了子类。
下班的时候,在车上一想,突然之间想明白了,自己上面的理论文字写了那么多,不就是这个道理么?
还拿人和男人的例子来说:
等于是我先在堆内存当中声明了一个男人,然后将其指向了人;男人肯定是人了,突然之间恍然大悟。
当然其会丢失男人特有的属性。
当然也不是绝对的全部丢失,因为java的多态性以及向上转型的特性,如果子类重写了父类当中的一个方法,那么调用p.test();肯定还是执行子类当中的test方法,前提是子类重写了test方法。
分享到:
相关推荐
在Java编程语言中,"在父类获取子类属性"是一个常见的需求,特别是在设计模式、继承和多态性等核心概念的应用中。这个主题涉及到面向对象编程的基本原理,特别是子类继承父类后如何访问和操作子类特有的属性。下面...
在Java中,子类可以通过以下方式重写父类的属性和方法: - **数据成员的重写**:当子类定义了一个与父类同名的数据成员时,子类成员将隐藏父类成员,即在子类中默认情况下无法直接访问父类成员。 - **方法的重写**...
java代码-使用java解决父类与子类的声明应用的源代码 ——学习参考资料:仅用于个人学习使用!
Java中父类调用子类的方法...本文总结了Java中父类调用子类的方法的三种方式,并对每种方式进行了详细的分析和解释。了解这些知识点对于Java开发者来说非常重要,可以帮助他们更好地理解面向对象编程的思想和设计模式。
Java中父类和子类之间的转换操作示例 Java 中父类和子类之间的转换操作是面向对象编程(OOP)中一个重要的概念。它允许开发者在不同的类之间进行类型转换,以便更好地实现继承和多态性。在 Java 中,父类和子类之间...
【java】父类声明子类实例化.mhtml
在Java编程语言中,子类继承父类是一种常见的特性,它允许子类扩展或复用父类的功能。当我们创建一个子类对象并将其赋值给父类引用时,这种行为被称为向上转型(Upcasting)。这一过程是自动且安全的,因为子类对象...
继承机制允许我们定义一个通用的父类,并让子类继承其属性和方法,从而实现代码复用和提高开发效率。多态性则允许我们在运行时动态地选择要调用的方法,从而提高了程序的灵活性和可扩展性。 在实际开发中,继承机制...
Java的多态性使得代码更加灵活和可扩展,通过父类引用子类对象的方式,不仅能够简化代码结构,还能够在不修改现有代码的基础上添加新的功能。理解并掌握多态性是成为高级Java程序员的关键步骤之一。
总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...
### Java中的继承(子类调用父类构造方法) #### 一、继承的基本概念 Java是一种支持面向对象编程的语言,其中“继承”是一项核心特性。继承允许创建一个新的类(称为子类或派生类),该类继承了现有类(称为父类...
### Java中的父类与子类概念详解 在Java编程语言中,继承是一种强大的特性,它允许我们创建新的类,这些新类会继承已有类的属性和行为。这种机制不仅能够提高代码的复用性,还能使得类之间的关系更加清晰、易于理解...
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
在Java编程语言中,"将子类引用赋给父类对象"是一种常见的多态性表现。这个过程被称为向上转型(Upcasting),它允许我们用父类引用指向子类实例,从而实现更通用的代码设计。然而,这并不意味着在转换过程中会丢失...
Java的子类调用父类的构造方法.pdf
Java编程关于子类重写父类方法问题的理解 Java编程中,子类重写父类方法是非常重要的概念之一。子类重新实现父类的方法称为重写,重写时可以修改访问权限修饰符和返回值,但方法名和参数类型及个数不能修改。只有...
当我们创建一个子类对象时,Java虚拟机(JVM)遵循特定的加载和初始化规则。以下是Java中父类与子类加载顺序的详细解释: 1. **静态初始化**: - 首先,JVM会加载类的静态部分。这意味着先加载所有静态变量的初始...
在Java编程语言中,"父类引用指向子类对象"是一种常见的多态性表现,它体现了面向对象设计的核心原则之一。这种现象发生时,父类类型的引用被用来创建和操作子类的对象,允许我们利用子类扩展的功能,同时保持代码的...
多态性是 Java 面向对象编程的精髓所在,它可以通过父类类型的引用指向子类的对象、方法的重写和重载、动态连接来实现。多态性可以提高程序的灵活性和可扩展性,使得程序更加灵活和强大。 知识点: 1. 多态性是 ...