栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

继承和组合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

继承和组合

文章目录
    • 继承(一个子类只能有一个父类)
      • 继承有两个主要作用
      • 继承实现
        • extend
        • instanceof运算符
      • 继承使用要点
      • 方法重写
        • 方法重写三个要点
      • final关键字
        • 作用
    • 组合
    • 何时组合何时继承

继承(一个子类只能有一个父类) 继承有两个主要作用
  1. 代码复用,更加容易实现类的扩展
  2. 方便对事务建模
继承实现 extend 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”关系,使用组合更好

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号