java:继承

本文详细介绍了Java继承中的关键概念,包括子类对父类属性和方法的访问规则、构造器的调用顺序以及super关键字的使用。通过实例展示了如何在子类中调用父类构造器,并解释了Java中的单继承机制。同时,提出了在设计类继承时应遵循的原则,确保子类和父类之间满足is-a关系。最后,给出了一个关于Computer、PC和NotePad类的继承示例,演示了如何在子类中扩展和重用父类属性。
摘要由CSDN通过智能技术生成

继承要注意的细节

1) 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问
2)子类必须调用父类的构造器,完成父类的 初始化
3)当创建子类对象时, 不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过.
4) 如果希望指定去调用父类的某个构造器,则显式的调用一下: super(参数列表)

5)super在使用时,必须放在构造器第一-行(super只能在构造器中使用
6) super() 和this() 都只能放在构造器第一-行, 因此这两个方法不能共存在- -个构造器
7) java 所有类都是Object类的子类,Object是所有类的基类
8)父类构造 器的调用不限于直接父类!将一直往. 上追溯直到Object类(顶级父类)

9)子类最多只能继承-一个父类(指直接继承),即java中是单继承机制。
思考:如何让A类继承B类和C类?[A继承B,B继承C]
10)不能滥用继承,子类和父类之间必须满足is-a 的逻辑关系(...是...)

例(1)

package eclipse;
public class extend {
	public static void main(String args[]) {
		B b=new B();
	}

}
class A{
	A(){
		System.out.println("a ");
	}
	A(String name){
		System.out.println("a name");
	}
}
class B extends A{
	B(){
		this("abc");
		System.out.println("b");
	}
	B(String name){
		System.out.println("b name");
	}
	
}

输出结果:
a

b name 

b

分析:因为B继承A,所以要先默认先调用父类A的构造器,因此先输出“a”,然后执行this("abc")要调用B的有参构造器,输出“b name”,最后输出“b”.

例(2)

package eclipse;

public class extend1 {
    public static void main(String args[]) {
		C c=new C();
	}

}
class A{
	public A() {
		System.out.println("我是A类");
	}
}
class B extends A{
	public B() {
		System.out.println("我是B的无参构造器");
	}
	public B(String name) {
		System.out.println(name+"我是B的有参构造器");
	}
}
class C extends B{
	public C() {
		this("hello");
		System.out.println("我是c的无参构造器");
	}
	public C(String name) {
		super("haha");
		System.out.println("我是C的有参构造器");
	}
}

结果:

我是A类
haha我是B的有参构造器
我是C的有参构造器
我是c的无参构造器

注意this与super的应用 

例(3)编写Computer类,包含CPU、内存、硬盘等属性,getDetails 方法用于返回Computer的详细信息
编写PC子类,继承Computer类,添加特有属性[品牌brand]
编写NotePad子类,继承Computer 类,添加特有属性[ color]
编写Test类,在main方法中创建PC和NotePad对象,分别给对象中特有的属性赋值,以及从Computer类继承的属性赋值,并使用方法并打印输出信息。

package eclipse;

public class extend3 {
	public static void main(String args[]) {
	pc pc1=new pc("intel",16,5000,"ibm");
	System.out.println("cpu="+pc1.getcpu()+" memory="+pc1.getmemory()+" disk="+pc1.getdisk()+" brand="+pc1.getbrand());
	}
}
class computer{
	private String cpu;
	private int  memory;
	private int disk;
	public computer(String cpu,int memory,int disk) {
		this.cpu=cpu;
		this.memory=memory;
		this.disk=disk;
	}
	public String getdetails() {
		return "cpu="+cpu+"memory="+memory+"disk="+disk;
	}
	public String getcpu() {
		return cpu;
	}
	public void setcpu(String cpu) {
		this.cpu=cpu;
	}
	public int getmemory() {
		return memory;
	}
	public void setmemory(int memory) {
		this.memory=memory;
	}
	public int getdisk() {
		return disk;
	}
	public void setdisk(int disk) {
		this.disk=disk;
	}
}
class pc extends computer{
	private String brand;
	public pc(String cpu, int memory, int disk,String brand) {
		super(cpu, memory, disk);
		this.brand=brand;
		// TODO Auto-generated constructor stub
	}
	public String getbrand() {
		return brand;
	}
	public void setbrand(String brand) {
		this.brand=brand;
	}
}
class notepad extends computer{
	private String color;
	public notepad(String cpu, int memory, int disk,String color) {
		super(cpu, memory, disk);
		this.color=color;
	}
	public String color() {
		return color;
	}
	public void setcolor(String color) {
		this.color=color;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值