在网上看见一个关于java继承的问题,觉得这是很多初学java应该注意的问题。
Java代码
public abstract class A {
int i=1;
public void printI() {
System.out.println("i="+i);
}
}
public class B extneds A{
int i=2;
public static void main(String[] args) {
B b=new B();
b.printI();
}
}
那么,控制台打出来的i的值是多少?
呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。
1、类的继承知识点
(1)java不支持多重继承,也就是说子类至多只能有一个父类
(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法
(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承
(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。
2、答案是2者如是说
子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;
3、歧义的产生
歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。
4、jvm的执行过程
(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化
(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。
(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。
那么,在这里A的成员函数当然是访问自己的成员变量了。
5、super关键字
super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:
Java代码
public abstract class A {
int i=1;
public void printI() {
System.out.println("i="+i);
}
}
public class B extends A{
public int i=2;
public void printI(){
super.printI();
}
public static void main(String[] args){
B b= new B();
b.printI();
}
}
分享到:
相关推荐
Java继承机制详解 Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`...
继承是面向对象编程的基本机制之一,允许一个类继承另一个类的成员变量和方法。Java中,继承是通过extends关键字实现的。子类可以继承父类的成员变量和方法,并可以添加新的成员变量和方法或覆盖父类的方法。 在...
本实验报告主要介绍了Java类的封装机制,包括类的声明和定义、静态成员和非静态成员变量的区别、基本参数和引用参数的区别、类构造方法的编写、类的方法实现、创建类实例的方法、继承类的定义和使用、方法的重新定义...
Java 语言中的继承是指一个类继承另一个类的所有成员变量和方法。子类继承父类的成员变量和方法,并可以添加新的成员变量和方法。继承的优点是可以重用代码,减少代码冗余。 在 Java 中,继承使用关键字 `extends` ...
4. 掌握派生类的定义:在 Java 中,派生类是从父类继承来的类,我们可以在派生类中添加新的成员变量和成员方法,也可以重写父类的成员方法。 二、实验环境 实验环境包括每位学生配备一台电脑,电脑需安装好 JDK 和...
内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为其成员。内部类的类体中不能声明静态成员变量和静态方法。 匿名类是一种特殊的内部类,它可以...
Java继承和多态 Java中的继承和多态是面向对象程序设计的两个重要特性。继承是一种由已有的类创建新类的机制,通过继承,可以先创建一个公有属性的一般类,然后根据一般类再创建一个具有特殊属性的新类。新类继承...
本文将从Java编程的角度,总结最大公约数和最小公倍数的计算方法,并探讨Java中类的继承机制。在这个实验中,我们将编写一个Parent类,包含一个计算最大公约数的方法f(int a, int b),然后编写一个Child类,继承自...
继承是JAVA中的一种机制,允许一个类继承另一个类的成员变量和方法。 * 继承的优点:代码重用、提高代码的可维护性 * 继承的方式:单继承、多继承 四、多态性 多态性是JAVA中的一种机制,允许对象以不同的形式...
解释:在 Java 中,private 修饰符可以使得成员变量只能被当前类访问,而 public 修饰符可以使得成员变量被所有类访问。 10. 正确的语句是()A.t.f 解释:在 Java 中,使用点号可以访问对象的成员变量。 11. ...
Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意事项: 1. 重写(也叫覆盖,也叫重构):重写...
localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...
在 Java 中,类的成员变量是类的属性,用于存储数据。成员方法是类的行为,用于操作成员变量。例如,在实验题 1 中,pi 和 radius 是 CCircle 类的成员变量,而 setCircle 和 getRadius 是其成员方法。 5. 设计类 ...
2. 继承性:Java面向对象编程支持继承机制,允许一个类继承另一个类的成员变量和方法,提高代码的复用性。 3. 多态性:Java面向对象编程支持多态机制,允许一个类的对象可以被视为其父类的对象,提高代码的灵活性。 ...
* 一个子类只能继承一个父类,这是 Java 的单继承机制。 * 子类可以继承父类的所有成员,但不能直接访问父类的私有成员。 * 子类可以修改或增加新的成员,使之更适合特殊的需要。 三、多态 多态是面向对象编程的第...
目 录 前言3 1剪刀石头布游戏设计思路阐述4 2程序概要设计5 功能需求分析5 性能需求分析5 程序框图5 Java类与自定义类相互继承的层次关系6 Java类与自定义类的说明6 类中成员与作用7 2.5程序运行效果与存在的问题7 ...
方法继承是 Java 编程语言的一种机制,允许一个类继承另一个类的属性和方法。使用 `extends` 关键字,可以继承一个类的所有公有、保护和默认级别的变量和方法。如果子类和基类在同一个包中,子类可以继承基类中的...
继承的特点是:子类可以继承父类的所有成员变量和方法,并且可以对父类的方法进行重写或重载。 二、方法重载和方法重写 方法重载是指在同一个类中定义了两个以上的同名的方法,但是它们拥有不同的参数列表。方法...
// IndexFileDeleter deleter是IndexWriter类的一个私有的成员变量,它在org.apache.lucene.index包里面,主要对删除索引文件进行实现和管理 deleter = new IndexFileDeleter(directory, deletionPolicy == null ...
本文档提供了多个Java面向对象编程的练习题,涵盖了类的成员变量、构造方法、方法、继承、多态、封装等重要概念。通过这些练习题,开发者可以熟悉Java语言的面向对象编程机制,提高编程能力。 一、类的成员变量 在...