首页 > 试题广场 >

以下代码运行输出的是

[单选题]

以下代码运行输出的是

public class Person{
	private String name = "Person";
	int age=0;
}
public class Child extends Person{
	public String grade;
	public static void main(String[] args){
		Person p = new Child();
		System.out.println(p.name);
	}
}


  • 输出:Person
  • 没有输出
  • 编译出错
  • 运行出错
推荐
Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。
编辑于 2017-01-09 19:47:11 回复(10)
1.一个java文件里,public 的类只能出现一个,只能出现一个,只能出现一个,否则,不管你用哪一个类名命名文件名编译器都会报错
2.关于多态。子类继承了父类的所有成员,包括private权限的成员变量,但是继承的子类具有私有变量的拥有权但是没有使用权。
3.private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。
编辑于 2017-06-27 10:11:40 回复(9)
首先不能两个public类,其次child类中无法访问父类的私有变量  
发表于 2017-01-06 20:26:51 回复(14)
错点是子类访问父类中的私有。 protected是可以的。
发表于 2021-12-04 16:18:43 回复(0)

看上面的回答:
大多数都是这样的解释,因为p实际指向的是子类,而子类不可继承父类的私有成员,所以子类对象无法访问。
但是这说的是运行期间发的事情好吗?这个代码编译期间都过不去,
不信你改成Person p = new Person();编译期间根据p的静态类型为其标识所属的类Person,而在子类的作用域中试图访问父类的私有成员是不合法,或者说根本找不到,所以会编译出错,因为无法为其生成正确的字节码!

编辑于 2017-07-12 21:05:56 回复(1)
这两种对象的创建很容易混淆。
1.
    Parent p1 = new Child();
    p1.function();
    当function()为子类覆盖父类的function时,则调用子类的;
    。。。。不是。。。。。。。。。。。。,则调用父类的;
注意:p1是不能调用子类独有的方法的,会产生编译错误!!;
           对于成员变量,则p1只能调用父类的,不能调用子类的
2.
    Child c1 = new Child();
c1就不存在不能调用子类独有的方法了。
发表于 2017-03-21 17:33:34 回复(3)

在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。

区别对比

  • 静态绑定发生在编译时期,动态绑定发生在运行时
  • 使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。
  • 静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。
  • 重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。
本例中name属于静态绑定,使用类信息,如果不用private修饰是可以访问的。private修饰只能在实例内部访问。
发表于 2017-08-07 17:17:44 回复(0)
歉头像
首先抛开两个public不讲,“编译看左,运行看右” 所以在编译时期是父类,因为父类的name变量是private修饰的 只能在自己类中调用,所以在子类调用是错误的,因此会发生编译错误,但在父类本类调用就没有问题。
发表于 2019-11-30 21:22:21 回复(0)
由于父类Person中name属性是private,所以只在本类中可以访问到;由于Java是动态绑定的,所以p是Child类的实例,没法访问到父类的私有属性。
发表于 2016-12-12 16:09:58 回复(1)
C
类外不能访问本类私有变量
发表于 2017-01-23 16:57:06 回复(0)
1, 一个类文件中只能有一个public类
2,子类可以继承父类的一切方法,成员变量,甚至是私有的,但是却不能够访问这些私有的成员变量和方法
发表于 2017-06-22 11:11:21 回复(2)

发表于 2018-06-13 16:53:14 回复(0)
子类无法访问父类的私有变量  name;所以编译出错.

发表于 2016-12-20 17:19:14 回复(0)
class Person{
	public String name = "Person";
	int age=0;
}
public class Son extends Person{
	public String grade;
	public String name = "son";
	public static void main(String[] args){
		Person p = new Son();
		System.out.println(p.name);
	}
}
其实这道题这样考可以更刁钻一些,考点从访问控制符变成了多态。
总结一下:
1、成员变量:以左边为准/
2、成员方法:编译以左边为准,运行以右边为准。
3、静态成员:编译和运行都以左边为准。

记住这 3 条葵花宝典,保管各位多态不败

编辑于 2020-04-11 11:28:24 回复(1)
Person类中的name属性是私有的,只能在本类中调用,或者写一个getName()方法,使得this.name=name,最后在Child类中调用
发表于 2019-08-29 16:29:52 回复(0)
我发现大家都在说几把
大家想想getting/setting,自己都不能直接访问了,子类还访问各几把
发表于 2022-04-18 13:46:46 回复(0)
1.不能两个public类,2.其次child类中无法访问父类的私有变量,Person中应该实现get、set方法,再使用getName()调用
发表于 2022-02-09 13:26:46 回复(0)
子类无法访问父类的私有变量
发表于 2022-01-30 17:40:12 回复(0)
子类不可以访问父类私有属性
发表于 2021-08-13 13:06:15 回复(0)
记住了——子类不能从父类继承到private修饰的成员变量和方法。所以这里的访问是会报错的
发表于 2021-12-20 20:52:05 回复(1)
因为父类name属性被private修饰所以编译错误
发表于 2021-12-14 16:39:31 回复(0)