java 父类调子类非重写方法
Java中,父类调用子类的非重写方法,是通过创建子类对象并将其赋值给父类引用的方式来实现的。在这种情况下,父类引用只能调用父类中定义的方法,而不能调用子类中新增或重写的方法。
首先,我们需要了解一下Java中的继承关系。在Java中,一个类可以通过继承关键字`extends`来继承另一个类,从而获得被继承类中的属性和方法。被继承的类称为父类或超类,继承的类称为子类或派生类。子类可以扩展父类的功能,并且可以添加自己的新功能。
当父类引用指向子类对象时,我们可以通过父类引用来调用父类中定义的方法。例如:
```java
class Parent {
public void sayHello() {
System.out.println("Hello from Parent class");
}
}
class Child extends Parent {
public void sayHi() {
System.out.println("Hi from Child class");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child();
parent.sayHello(); //输出:Hello from Parent class
}
}
```
在上面的例子中,`Parent`类是`Child`类的父类,`Child`类继承了`Parent`类的`sayHello()`方法并添加了自己的`sayHi()`方法。在`main()`方法中,我们使用父类`Parent`的引用`parent`指向子类`Child`的对象,并调用了`sayHello()`方法。通过父类引用调用的是父类的方法,所以输出结果为"Hello from Parent class"。
但是,通过父类引用是无法访问子类中定义的非重写方法的。也就是说,在上述例子中,我们无法通过`parent`对象来调用`Child`类中新增的`sayHi()`方法。
那么,如何才能调用子类中的方法呢?我们可以通过类型转换将父类引用转换为子类引用,从而获得子类的方法。例如:
```java
class Parent {
public void sayHello() {
System.out.println("Hello from Parent class");
}
}
class Child extends Parent {
public void sayHi() {
System.out.println("Hi from Child class");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child();
if (parent instanceof Child) {
Child child = (Child) parent;
child.sayHi(); //输出:Hi from Child class
}
}
}
```java反射获取父类属性
在上述例子中,我们在`main()`方法中使用了`instanceof`关键字来判断`parent`对象是否为`Child`类的实例。如果是的话,我们将`parent`对象转换为`Child`类的引用`child`,然后就可
以调用`sayHi()`方法了。通过这种方式,我们可以在父类中调用子类的非重写方法。
然而,需要注意的是,如果将父类引用转换为子类引用,而实际上父类引用并不指向子类的对象,那么在运行时会抛出`ClassCastException`异常。为了避免这种情况,我们可以在转换之前使用`instanceof`关键字进行判断,并在转换后再调用子类方法。
此外,我们还可以使用反射机制来调用子类的非重写方法。通过反射,我们可以在运行时动态地获取类的信息并调用其方法。例如:
```java
import flect.Method;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论