【Java之旅】8.面向对象三大特征 之 继承

【Java之旅】8.面向对象三大特征 之 继承

面向对象有三大特征:封装继承多态

今天就来写一写这个“继承”。

8.1 子类与父类

继承是用于类与类之间的,它可以体现出类与类之间的关系

比如说界、门、纲、目、科、属、种

他们就是一个大类 “界” 分化出多个小类。

我们称大类为父类,而在父类基础上衍生出来的小类称为子类

那我们应该如何来让 一个类去继承另一个类呢?代码如下👇

class Players
{
	private String name;
	private int speed;
	private int armour;
}

class Attackers extends Players
{
}

class Defenders extends Players
{
}

我们定义了Players类、Attackers类、Defenders类。

其中Players是父类,而Attackers和Defender是它的子类

我们使用extends来建立起类与类之间的继承关系。

extends意为延申。

既然是继承关系,那么子类一定可以在父类上继承一些东西

我们先完善一下Players类的方法(setter、getter、toString)

public class Inheritance
{
	public static void main(String[] args) 
	{
		Attackers kupurk = new Attackers();
		kupurk.setName("ash");
		kupurk.setSpeed(5);
		kupurk.setArmour(1);
		System.out.println(kupurk);
	}
}

class Players
{
	private String name;
	private int speed;
	private int armour;
	public void setName(String name)
	{
		this.name=name;
	}
	public String getName()
	{
		return this.name;
	}
	public void setSpeed(int speed)
	{
		this.speed = speed;
	}
	public int getSpeed()
	{
		return speed;
	}
	public void setArmour(int armour)
	{
		this.armour=armour;
	}
	public String toString()
	{
		return "[" + name + ",Speed:" + speed +",Armour:"+ armour +"]";
	}
}

class Attackers extends Players
{
}

class Defenders extends Players
{
}

通过这一串代码,我们发现,子类Attacker继承了父类Players中的所有属性和方法

但是子类无法继承父类Private修饰的方法,这里就不展示了。

众所周知,构造器也属于一种特殊的方法即构造方法,那我们也试一试子类能否继承父类的构造方法。

public class Inheritance
{
	public static void main(String[] args) 
	{
		Attackers kupurk = new Attackers();
		Attackers mo = new Players();
		mo.setName("buck");
		mo.setSpeed(2);
		mo.setArmour(2);
		System.out.println(mo);
        //kupurk.setName("ash");
		//kupurk.setSpeed(5);
		//kupurk.setArmour(1);
		//System.out.println(kupurk);
	}
}

程序报错:

E:\工具\Markdown\输出\EditPlus_out\Inheritance>javac Inheritance.java
Inheritance.java:6: 错误: 不兼容的类型: Player无法转换为Attackers
                Attackers mo = new Player();
                               ^
1 个错误

子类无法继承父类的构造方法,那么父类能否构造出子类呢?

public class Inheritance
{
	public static void main(String[] args) 
	{
		Attackers kupurk = new Attackers();
		Player mo = new Defenders();
		mo.setName("buck");
		mo.setSpeed(2);
		mo.setArmour(2);
		System.out.println(mo);
        //kupurk.setName("ash");
		//kupurk.setSpeed(5);
		//kupurk.setArmour(1);
		//System.out.println(kupurk);
	}
}

运行后成功得到结果:[buck,Speed:2,Armour:2]

②结论

通过上述试验,所以我们可以得出以下结论:

①子类可以继承父类的成员属性和成员方法(非Private类、非构造方法),

也继承了父类的静态方法

父类中private类修饰的方法是父类独有的,不会被继承

②子类无法构造父类,但父类可以构造子类

Player mo = new Defenders();

Player mo 叫做父类型的引用

Defenders是Player的子类,在堆内存中有一个Defenders类型的对象,叫做子类型的对象

父类型的引用指向子类型的对象

就是Player mo = new Defenders();的解读

子类也可以拥有父类没有的特性

我们只需要在子类里面进行编写即可

class Attackers extends Players
{
	public void defuse
	{
		System.out.println("Planting the bomb!!!");
	}
}

我们就添加了一个这个子类特有的方法defuse

而父类无法去调用这个子类的方法

所以我们也可以把父类理解为子类共性的集合

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值