java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/*
样例1:
  class Parent{
     int num = 3;
  }

  class Child extends Parent{
     int num = 4;
  }
*/

/*
样例2:
class Parent{

}

class Child extends Parent{
    int num = 4;
}
*/

/*
样例3:
class Parent{
    void show(){
	    System.out.println("Parent Show!");
	 }
  }

  class Child extends Parent{
	void show(){
	    System.out.println("Child Show!");
	 }
  }
*/

/*
样例4:
class Parent{

  }

  class Child extends Parent{
	void show(){
	    System.out.println("Child Show!");
	 }
  }
*/

class Parent{
    static void show(){
	    System.out.println("Parent Show!");
	 }
  }

  class Child extends Parent{
	static void show(){
	    System.out.println("Child Show!");
	 }
  }

public class PC{
   public static void main(String[] args){
        Parent p = new Child();
		//样例1:
		//System.out.println(p.num);// 3, 输出的是父类的num;

		//样例2:
		//System.out.println(p.num);// 错误: 找不到符号 num

		//样例3:
		//p.show();//Child Show!  输出的是子类的方法!

		//样例4:
		//p.show();//  错误: 找不到符号   p.show();

		//样例5:
		p.show();// Parent Show!  运行父类的静态方法。
   }
}

/*
总结:
对象多态时:
1.成员变量:(不涉及覆盖)
编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过,没有,编译失败。
运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
简单的说:编译和运行都参考等号的左边。
2.成员函数(非静态):
编译时:参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过, 没有,编译失败:
运行时:参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边, 运行看右边。
3.静态函数, 变量:
   编译和运行都是参考左边参数类型!
   其实静态方法不存在多态, 静态方法是属于类的,我们说的是对象的多态!静态方法直接用类名调用就好了,
   没必要创建对象!
   静态的方法只能被静态的方法所覆盖!

*/

  

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

时间: 2024-10-11 17:16:13

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况的相关文章

java中实现多态的机制是什么?

多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本.尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念. Java中的多态总是子类型

Java中实现多态的机制

一,多态定义: 多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定. 一,实现多态的机制 java中实现多态的机制是依靠父类或接口的引用指向子类.从而实现了一个对象多种形态的特性.其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例的方法. 三,条件 Java实现多态有三个必要条件:继承.重写.向上转型 原文地址:https://www.cn

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

Java中对象、对象引用、堆、栈、值传递以及引用传递的详细解释

Java中对象.对象引用.堆.栈.值传递以及引用传递的详细解释 1.对象和对象引用的区别: (1).对象: 万物皆对象.对象是类的实例.在Java中new是用来在堆上创建对象用的.一个对象可以被多个引用所指向. (2).对象引用: 类似于C++中的地址.通过对象引用可以找到对象.一个引用可以指向多个对象.操纵的标识符实际上是指向对象的引用. 就像:对象存放在屋子里,对象的引用就相当于屋子的钥匙. 2.值传递和引用传递的区别: (1).值传递:传递的是值的拷贝.也就是说传递后就不互相关了. (2)

简述JDBC原理 + 在JAVA中异常是什么 + throws 与 throw 区别 + 简单解释以下JAVA中的多态

JDBC原理: 加:加载驱动 链:创建连接 预:创建预编译 执:执行SQL语句(查询需要处理结果级) 释:关闭链接: DBC中定义了一些接口:  1.驱动管理:  DriverManager  2.连接接口  Connection  DatabasemetaData  3.语句对象接口  Statement  PreparedStatement  CallableStatement  4.结果集接口  ResultSet  ResultSetMetaData JDBC只定义接口,具体实现由各个数

Java中字符串比较时==和equals的区别

==是比较两个字符串引用的地址是否相同,即是否指向同一个对象,而equals方法则比较字符串的内容是否相同. 例如String a = "abc"; String b = "abc"; a == b返回true,a.equals(b)同样返回true,这是为什么呢? 原来程序在运行时有一个字符串池,创建字符串时会先查找池中是否有相应的字符串,如果已经存在的话只需把引用指向它即可,如果没有则新建一个. 上例中创建a时,会在字符串池中首先创建一个"abc&qu

java中对于多态的理解

面向对象: 类:具体的对象抽象而来,可以抽象的表示一类具有相同特征和行为的对象 对象:是由类的实例化而来,对象是类的一个实例 java中关于多态的理解 打个比方 父亲person有行为这个方法,里面包括几个动作:吃饭,睡觉,走路 父亲有三个儿子,三个儿子都继承了父亲的行为方法,所以三个儿子都有吃饭,睡觉,走路这些动作,但是三个儿子又分别有自己的动作--大儿子A会弹吉他,二儿子B会唱歌,三儿子C会打鼓 ... 1.Person person = new A(); 不是父类对象指向子类引用而是父类引

C++ const成员变量、成员函数和对象

const成员变量 const成员变量和const普通变量用法相似.初始化const成员变量只有一种方法,就是通过构造函数的初始化列表. const成员函数 const成员函数可以使用类中的所有成员变量,但是不能修改它们的值. 注意:const成员函数需要在声明和定义的时候在函数头部的结尾加上const关键字 函数开头的const用来修饰函数的返回值,表示返回值是const类型,也就是不能被修改. 函数头部的结尾加上const表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值.

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num