java 多态奇怪现象,子类还没有构造完成就开始干活了,谁来帮我解释?

简介: java代码: package test.extend; public class Base { public Base(){ System.out.println("基类构造"); say(); } public void say(){ System.
java代码:
package test.extend;

public  class Base {
	public Base(){
		System.out.println("基类构造");
		say();
	}
	
	public void say(){
		System.out.println("我是基类");
	}
	
	public static void main(String[] args) {
			Base base=new Child();
			
		}
}

 class Child extends Base{
	 public Child(){
		 System.out.println("子类构造");
		 say();
	 }
	 
	 @Override
	 public void say(){
		 System.out.println("我是子类");
	 }
}
运行结果:

基类构造
我是子类
子类构造
我是子类

 

 

 

 

 

 

在C#中:
 public class BaseA
    {
      public  BaseA()
        {
            Function();
        }

       public virtual void Function()
        {
           Console.WriteLine("Base::Function");
        }
    }

    class ChildA :BaseA
    {
      public  ChildA()
        {
            Function();
        }

        public virtual void Function()
        {
            Console.WriteLine("Child::Function");
        }
    }
    
运行结果:

Base:Function

Child::Function

 

在C++中:
  class BaseA
    {
        BaseA()
        {
            Function();
        }

        virtual void Function()
        {
           cout<<"Base::Function";
           cout<<endl;
        }
    }

    class ChildA : public BaseA
    {
        ChildA()
        {
            Function();
        }

        virtual void Function()
        {
            cout<<"Child::Function";
            cout<<endl;
        }
    }

        }
    }
运行结果:

Base:Function

Child::Function

开始做,坚持做,重复做
相关文章
|
7月前
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
284 0
|
8月前
|
Java
java构造方法,构造代码块,静态代码块的执行顺序
本文介绍了Java中构造方法、构造代码块和静态代码块的执行顺序。静态代码块用`static`声明,在JVM加载类时执行一次;构造代码块在每次创建对象时执行,先于构造方法;构造方法用于对象初始化,创建对象时调用。示例代码展示了这三者的输出顺序,并解释了它们的区别和应用场景。
254 1
|
10月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
521 15
|
10月前
|
Java
java代码优化:判断内聚到实体对象中和构造上下文对象传递参数
通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时
110 15
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
205 4
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
280 4
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第1天】Java零基础教学篇,手把手实践教学!
78 1
|
Java
java继承和多态详解
java继承和多态详解
162 5
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
123 1