类的复用

1.类的复用——组合(has-a)

·汽车类 Car 由引擎 Engine、车灯 Light、车窗 Window、轮胎 Wheel、车门 Door 等组成

public class Car {
		// a Car has-a a Engine
		private String type;
		private Door[] d;
		private Window[] w;
		private Engine en;
			private Wheel[] wh;
		private Light[] l;
		Car(String type){
		this.type = type;
		d = new Door[4];
		w = new Window[2];
		wh =new Wheel[4];
		l = new Light[10];
		en = new Engine();
		d[0] = new Door();
		d[1] = new Door();
		d[2] = new Door();
		d[3] = new Door();
		}
	}

·注意:在类的设计中,能用组合的尽量不要使用继承来实现

2.类的复用——继承(is-a)

·Animal 动物类 可以派生出 狗 Dog 类 ,a Dog is-a Animal
A 派生出 B 类, 我们称 B 类为 A 类的子类,A 类为 B 类的父类
定义语法: Class B extends A{ }

	public class A {
	int a;
	public void fun() {
	System.out.println("fun() of Class A");
	}
	}
	public class B extends A {
	//类 B 是类 A 的子类,继承得到成员变量 a 和方法 fun()
	}

3.方法的重载(overload)

·一个类中,名称相同而参数列表不同的方法,构成了重载方法

public class Ca {
public void fun() {
System.out.println("method fun() of Ca");
}
public void fun(int n) {
System.out.println("method fun(int n) of Ca");
}
public void fun(double d) {
System.out.println("method fun(double d) of Ca");
}
}
public class Cb extends Ca {
public void fun(int m,int n) {
//该方法与父类继承得到的其他 3 个 fun 方法,相互构成了方法的重载
System.out.println("method fun(int m,int n) of Cb");
}
}

4.方法的覆盖(重写、override)

·子类可以重新编写父类同名、同参数的方法覆盖掉父类中的方法

	public class Father {
	public void fun() {
	System.out.println("Method fun() of class Father");
	}
	}
	public class Son extends Father {
	public void fun() { //覆盖了父类同名、同参数列表方法
	System.out.println("Method fun() of class Son");
	}
	}

5.this 与 super

·this 代表当前类对象本身
·super 代表父类

public class Father {
public void fun() {
System.out.println("Method fun() of class Father");
}
public void fun(int n) {
System.out.println("Method fun(int n) of class Father");
}
}
public class Son extends Father {
public void fun(double x) {
// this.fun((int)x);
System.out.println("Method fun(double x) of Son");
}
public void fun(int n) {
super.fun(n);//调用父类的 fun(int n)
System.out.println("Method fun(int n) of Son");
}
}

6.构造器

·构造器是在通过 new 关键字创建一个对象的时候运行的代码
·构造器是可以重载
·通过 new 关键字创建子类对象时,首先自动的去调用父类的无参构造器

public class Ca {
Ca() {
System.out.println("Constructor Ca() of class Ca");
}
Ca(String str){
System.out.println("Constructor Ca(String str) of class Ca");
}
}
public class Cb extends Ca {
Cb(){
System.out.println("Constructor Cb() of class Cb");
}
}·
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值