java继承与覆盖

(1).成员变量的继承与隐藏

基于父类创建子类时,子类可以继承父类的成员变量和成员方法。但是,如果在父类和子类中同时声明了一个同名变量,则这两个变量在程序运行时同时存在。也就是说,子类在使用父类的同名变量时,父类的同名变量只是被隐藏了。

代码示例:

class Person {
	String name;
	int age;
	public Person(String name,int age) {
		this.name=name;this.age=age;
	}
	public Person() {
		this.name="person name";this.age=23;
	}
	void pprint() {
		System.out.println("class:Person; "+"Name: "+this.name+"; age:"+this.age);
	}
}
class Student extends Person{
	String name;
	int classno;
	public Student() {
		this.name="student name";this.age=20;
	}
	public Student(String name,int age,int classno) {
		this.name=name;this.age=age;this.classno=classno;
	}
	void sprint() {
		System.out.println("class:Student; "+"Name: "+this.name+"; age"+this.age+"; classno: "+this.classno);
	}
}
public class VarInherit{
	public static void main(String args[]) {
		Student obj1 = new Student();
		Student obj2 = new Student("LIXiao",18,1);
		obj1.pprint();obj2.pprint();
		obj1.sprint();obj2.pprint();
	}
}

运行结果:
class:Person; Name: person name; age:20
class:Person; Name: person name; age:18
class:Student; Name: student name; age20; classno: 0
class:Person; Name: person name; age:18

解释说明:

1.由于Student子类中未定义成员变量age,因此该成员变量源自父类,这说明子类可以继承父类的成员变量。

2.name变量同时在父类和子类中进行了声明。当我们通过Student obj1 = new Student();语句创建obj1时,系统会首先调用父类的无参构造方法,然后在调用子类的无参构造方法,所以父类中的name被赋值为person name,子类中的name被赋值为student name,公共成员age先被赋值为23,然后被赋值为20。又子类成员classno没有被显式赋值,则输出系统自动初始化为默认值的0。

(2).方法的继承和覆盖

子类可以继承父类中所以可以被子类访问的成员方法,但是如果子类重新定义了从父类继承的方法,那么父类的这个方法在子类中将不复存在,此时称子类方法覆盖了父类的方法,简称方法覆盖。

代码示例:

class Parentclass {
	void pprint() {
		this.print();
		this.print1(0);
	}
	void print() {
		System.out.println("父类:同类型、同名、同参数成员方法!");
	}
	void print1(int a){
		System.out.println("父类:同类型、同名但参数不同成员方法!");
	}
}
class Subclass extends Parentclass{
	void sprint() {
		this.print();
		this.print1();
	}
	void print() {
		System.out.println("子类:同类型、同名、同参数成员方法!");
	}
	void print1() {
		System.out.println("子类:同类型、同名但参数不同成员方法!");
	}
}
public class MethodInherit{
	public static void main(String args[]) {
		Subclass obj=new Subclass();
		obj.pprint();
		obj.sprint();
	}
}

运行结果:

子类:同类型、同名、同参数成员方法!
父类:同类型、同名但参数不同成员方法!
子类:同类型、同名、同参数成员方法!
子类:同类型、同名但参数不同成员方法!

解释说明:

1.所以子类创建对象时,可以直接引用父类中的方法,如:obj.pprint();

2.子类和父类中的两个方法print中方法的类型,名字和参数完全相同所以子类覆盖了父类中的print方法,父类的print方法不复存在。

继承注意事项:

1.子类可以继承父类的成员变量,包括私有的成员变量,但不能直接访问。

2.构造子类对象时会自动调用父类的构造方法来初始化从父类继承的成员变量。

3.java中的类只能单继承,即一个子类只能继承一个父类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的继承是面向对象编程中的一种重要概念,通过继承可以实现类与类之间的父子关系,子类可以继承父类的属性和方法。在继承关系中,子类可以对父类的方法进行重载和覆盖,从而实现多态的概念。 通过继承,子类可以继承父类的非私有成员变量和方法。这样可以实现代码的复用,避免重复编写相似的代码。通过继承,可以在子类中调用父类的方法,也可以在子类中新增自己特有的方法和属性。子类还可以对从父类继承来的方法进行修改,以适应自己的需求。 多态是指同一类型的对象,在不同的状态下表现出不同的行为。在Java中,多态性可以通过继承和方法的重写实现。当父类的引用指向子类的实例时,可以通过该引用调用子类中重写的方法,实现不同类的对象调用同一个方法产生不同的结果。多态可以提高代码的灵活性和扩展性,使得程序更易于维护和扩展。 在Educoder平台上,可以通过练习和编程任务来学习和掌握Java继承与多态。通过编写继承父类的子类,重写父类的方法以及引用父类的实例来实现多态,可以更好地理解和应用这两个概念。平台提供了丰富的练习题和编程任务,帮助学习者提高对继承和多态的理解和应用能力。 总之,Java中的继承和多态是面向对象编程中的重要概念,通过继承可以实现代码的复用,多态可以实现不同对象的不同行为。在Educoder平台上通过练习和编程任务,可以更好地学习和掌握这两个概念。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值