java 实例化是调用了子类重写方法

java 实例化时调用了抽象方法或者class里面某个方法,如果子类有重写改方法,实际运行的是子类重写方法

package auto.test;

//抽象父类
public abstract class Father {
    public Father() {
        // TODO Auto-generated constructor stub
        oupPut();  //实例化时调用,子类有,就调用子类方法,子类没有,就调用父类方法
    }
    //父类抽象方法,让子类重写
    public  void  oupPut(){
        System.out.println("from Father class");
    };
}
//子类A
class ChildA  extends Father{
    //重写父类方法
    @Override
    public  void  oupPut(){
        System.out.println("from childA class");
    }
}
// 子类B
class ChildB extends Father {
    //重写父类方法
    @Override
    public  void  oupPut(){
        System.out.println("from childB class");
    }
}
class ChildC extends Father {
    //没有重写父类方法

}

执行测试类
public class TestClaass {

    public TestClaass() {
        // TODO Auto-generated constructor stub
    }
    public static void main(String arg[]){
        Father a = new ChildA();
        Father b = new ChildB();
        Father c = new ChildC();
    }
}

运行结果:

from childA class
from childB class
from Father class

时间: 2024-10-11 05:38:15

java 实例化是调用了子类重写方法的相关文章

java父类调用被子类重写的方法

[转][原文] 1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解java继承中的初始化机制). 例子: [java] view plain copy public abstract class Father { public Father() { display(); } public void display() { System.out.println("Fathe

Objective-c 子类重写方法调用[super method]小实验

最近温习<learn objective-c on the mac> 第4章关于重写的调用了[super setFillColor:c]很不理解其作用,可能是因为翻译逻辑不清的原因吧,特地写了个小例子理解一下 定义一个father类和son类 father: #import <Foundation/Foundation.h> @interface father : NSObject { int num; } -(void)setNum:(int)num; @end #import

“全栈2019”Java第四十八章:重写方法Override

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第四十八章:重写方法Override 下一章 "全栈2019"Java第四十九章:重载与重写对比详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组

子类实例化,父类构造器中被调用被子类重写的方法,会执行父类还是子类的呢?

public class Test001 { public static void main(String[] args) { new Child(); } }class Father{ private String name = "f"; public Father(){ tell(); } public void tell(){ System.out.println("father "+this.name); }}class Child extends Fath

Java使用HttpURLConnection调用WebService(原始方法)

说明:使用Java原生的HttpURLConnection调用WebService可以免去引入SOA的框架,比如一些CXF框架等.可以使代码足够精简,比如对于一些只调用一两个接口的,这种方式是最适合的. package com.jsfot.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWrit

Java 类加载、调用构造器、执行方法的过程

注:整理到这部分知识点时候发现有很多问题还没搞清楚,所以这里可能会存在很多不够详细甚至错误的理解,准备翻一遍编程思想再来更新, 欢迎评论交流 当JVM执行到这么一句代码:  new Person().setName("superzhao") 它会做这么几件事 类加载 JVM会用类加载器加载xxx.Person这个class文件 加载(class){ if(class有父类){ 加载(superclass); } 1.静态域申明,默认初始化为0,false,null 2.按照申明顺序(从

Java中不要在父类的构造方法中调用会被子类重写的方法

在Java中,不要在父类的构造函数中调用会被子类重写的方法,否则运行时会遇到意想不到的错误.看一个例子就会明白: import java.util.*; class Animal { public Animal() { eat(); } protected void eat() { System.out.println("Eat something"); } } public class Bird extends Animal { public Bird() { } @Override

c#中的重写方法与隐藏方

1.父类中有方法a,添加virtua修饰符可声明为虚方法,在子类中可以用override声明后重写方法a. 2.父类中有方法a,在子类中可以有new修饰符声明后隐藏父类方法. 子类重写方法后,对于子类的任何实例,父类的原方法a都已经不存在. 子类隐藏父类方法后,父类的原方法仍然存在,当子类的实例的类型转为父类时,调用的方法a即为原来的方法. 1 //重写方法 2 class A 3 { 4 public virtual void a() 5 { 6 Console.WriteLine('CLAS

Java父类对象调用子类实体:方法重写与动态调用

众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例子 class Father{ public void announce(){ System.out.println("Father"); } } class Child extends Father{ @Override public void announce(){ System.ou