Java基础 类的继承关系

Java类的扩展

*当我们创建一个Java project,这个项目名和包都可以命名为demo,在这个包中创建我们需要的类,来完成某些功能。但这远远不够,当我们需求变得更多的时候。Java类的扩展是一个非常好的解决问题方法。
或者说Java类的继承
*

package dome;

public class CD extends Item {
	//extends扩展,CD就是Item的一个子类,通过派生,继承
	//CD中的属性动作
//	private String title;
	private String artist;
	private int numbofTracks;
//	private int playingTime;
//	private boolean gotIt = false;
//	private String comment;

	//属性构造
	public CD(String title, String artist, int numbofTracks, int playingTime, String comment) {
		super(title,playingTime,false,comment);                       //构造
//		this.title = title;                //this一般指的是类CD
		this.artist = artist;
		this.numbofTracks = numbofTracks;
//		this.playingTime = playingTime;
//		this.comment = comment;
	}

代码中能看到类CD扩展类Item,也可以说子类CD继承父类Item
但是也要注意:

  1. 子类和父类的关系,属性访问并不继承;
  2. 当我们去构造一个子类的对象的时候,他首先要确保它的父类所拥有的那些成员变量得到恰当的初始化;
  3. 所谓父类中的初始化:1定义初始化,2构造器,若这两个模块同时存在,先做定义初始化;
  4. 如果父类和子类都有定义初始化和构造器,先开始执行父类中的程序,在做子类中的程序;

父类Item

对象变量和属性

package dome;

public class Item {
    //定义	子类中的公共属性
	private String title;                              
	private int playingTime;
	private boolean gotIt = false;
	private String comment;
	//构造初始化这些属性
	public Item(String title, int playingTime, boolean gotIt, String comment) {
		super();
		this.title = title;
		this.playingTime = playingTime;
		this.gotIt = gotIt;
		this.comment = comment;
	}

父类和子类的关系:

  1. 类定义了类型,子类定义了子类型
  2. 子类的对象可以被当作父类的对象来使用:1赋值给父类的变量2传递给需要父类对象的函数3放进存放父类对象的容器;
  3. 子类的对象可以传递给需要父类的对象的函数,子类对象可以赋值给父类的变量,变量只是对象的一个管理者;

容器的定义

需要一个类对容器的定义,方便父类中的变量执行后续操作对子类中的对象和属性。
子类的对象可以放在存放父类对象的容器中;

package dome;

import java.util.ArrayList;

public class Database {
//	private ArrayList<CD>listCD = new ArrayList<CD>(); //容器CD唱片
	private ArrayList<Item>listItem = new ArrayList<>();  //做一个新类Item
	
//	public void add(CD cd)                     //添加数据
//	{
//		listCD.add(cd);
//	}
	
	public void add(Item item)               //item多态变量,Item是item的声明类型,一般是静态的
	{
		listItem.add(item);
	}
	
	public void list()                       //表单中的所有数据
	{
//		for(CD cd:listCD) 
//		{
//			cd.print();
//		}
		for(Item item : listItem)             //for each循环,变量item只是一个管理者
		{
			item.print();                     //输出各个子类中的对象     
			System.out.println();
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Item item = new Item();
		CD cd = new CD("b","h",5, 60,"sdfsefg");
		item = (Item)cd;           //造型
		//CD cc =(CD)item;     //强制,但不是类型转换	
		Database db = new Database();
  • Java的对象变量是多态的,他们能保存不止一种类型;
  • 他们可以保存的是声明类型的对象,或声明类型的子类的对象;
  • 把子类的对象赋给父类的变量的时候,就发生了向上的造型;

向上造型

造型cast:子类对象可以赋值给父类的变量,但注意!Java中不存在对象对对象的赋值!,父类的对象不能赋值给子类的变量!
Vechicle v; 父类
Car c = new Car; 子类
v = c ;可以
c = v ;错误,只能向上造型
可以用造型: c = (Car)v;(只有当v这个变量实际管理的是Car才行)
向上造型,拿一个子类的对象,当作父类的对象来用
向上造型是默认的,不需要运算符,向上造型总是安全的

Java类的继承总结

  1. 继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
  2. Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
  3. 这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。

构造器

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参构造器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值