继承和组合 final关键字

继承(一个子类只能有一个父类)

继承有两个主要作用

  1. 代码复用,更加容易实现类的扩展
  2. 方便对事务建模

继承实现

extends
instanceof运算符
package com.ssc.inherit;

import java.security.PublicKey;

import OrientedObject.ThisStudy;

public class Person {
	String name;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student uStudent = new Student("孙少聪", 20);
		System.out.println(uStudent instanceof Person);
		System.out.println(uStudent instanceof Student);
	}
	public void rest() {
		System.out.println("我要休息!!");
	}

}


class Student extends Person{
	int score;
	
	public void study() {
		System.out.println(this.name+"要学习!!");
	}
	
	Student(String name,int score) {
		// TODO Auto-generated constructor stub
			this.name = name;
			this.score = score;
	}
}

继承使用要点

  • Java 中只有单继承
  • Java 中类没有多继承,接口有多继承
  • 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法
  • 如果定义一个类时,没有调用 extends,则它的父类是:java.lang.Object。

方法重写

方法重写三个要点
  1. “= =”: 方法名、形参列表相同
  2. “≤”:返回值类型和声明异常类型,子类小于等于父类
  3. “≥”: 访问权限,子类大于等
package com.ssc.inherit;

public class Transportation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TransTool uTransTool = new TransTool();
		TransTool uCar = new Car();
		TransTool uTrain = new Train();
		TransTool uPlane = new Plane();
		uTransTool.run();
		uCar.run();
		uPlane.run();
		uTrain.run();
	}

}

class TransTool{
	public void run() {
		System.out.println("我是工具");
	}
}

class Car extends TransTool{
	public void run() {
		System.out.println("我是小汽车,我可以达到120km/h");
	}
}

class Train extends TransTool{
	public void run() {
		System.out.println("我是火车,我可以达到300km/h");
	}
}

class Plane extends TransTool{
	public void run() {
		System.out.println("我是飞机,我可以达到1000km/h");
	}
}

final关键字

作用
  1. 修饰变量:被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。
    final int MAX_SPEED = 120
  2. 修饰方法:该方法不可被子类重写。但是可以被重载!子类里面可以调取使用
    final void study(){}
  3. 修饰类:修饰的类不能被继承。比如:Math、String 等。
    final class A {}

组合

  1. “组合”不同于继承,更加灵活。
  2. “组合”的核心就是“将父类对象作为子类的属性”,然后,“子类通过调用这个属性
    来获得父类的属性和方法

package com.ssc.inherit;

public class Animal {
	int age;
	String name;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Taidi uTaidi = new Taidi(20, "哈哈");
	}
	public void speak() {
		System.out.println("我要嚎叫了");
	}
	
}

class Dog{
	
	public void run() {
		System.out.println("我是小狗");
	}
}

class Taidi{
	Animal uAnimal = new Animal();
	
	public Taidi(int age,String name) {
		// TODO Auto-generated constructor stub
		this.uAnimal.age = age;
		this.uAnimal.name = name;
		uAnimal.speak();
	}
}

何时组合何时继承

  • 继承和组合都可以代码复用
  • 继承除了代码复用、也能方便我们对事物建模。所以,对于“is -a”关系建议使用继承,
    “has-a”关系建议使用组合。

比如:上面的例子,Taidi is a Animal 这个逻辑没问题,但是:Taidi has a Animal
就有问题了。这时候,显然继承关系比较合适。
再比如:笔记本和芯片的关系显然是“has-a”关系,使用组合更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值