Java基础 面向对象的三大特征之继承 方法覆盖

鳄鱼君

发表文章数:642

热门标签

, ,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Java » Java基础 面向对象的三大特征之继承 方法覆盖

面向对象的三大特征:封装、继承、多态。继承基本的作用是:代码复用,更要的作用是,有了继承才有了以后方法的覆盖和多态机制!语法格式:

[修饰符列表] class 类名 extends 父类名{
  java语句
}

在java语句当中,继承只支持单继承,一个类不能同时继承很多类,但是可以间接继承多个类,例如B继承A,C继承B,那么C间接继承A。这里需要注意一些术语:

A类称为:超类,基类,父类,superclass
B类称为:子类,派生类,subclass


在java语言中,子类继承父类需要注意:

  1. 私有的不支持继承
  2. 构造方法不支持继承
  3. 其它数据都可以被继承

java语言中,一个类显示没有继承任何类,该类默认继承JavaSE库中提供的java.lang.Object类:

public class VipRole {
	public static void main(String[] args){
		VipRole r = new VipRole();
		String s = r.toString();
		System.out.println(s);//com.day01.javase.VipRole@459189e1

	}
}

现在定义一个Role角色类:

public class Role {
	// 角色具有生命值和角色自身的属性
	private int live;
	private String attr;
	
	public Role() {
		
	}

	public Role(int live, String attr) {
		this.live = live;
		this.attr = attr;
	}
	
	//setter和getter
	public int getLive() {
		return live;
	}
	public void setLive(int live) {
		this.live = live;
	}
	public String getAttr() {
		return attr;
	}
	public void setAttr(String attr) {
		this.attr = attr;
	}
	
	

现在需要一个VipRole来定义vip角色,vip角色也具有生命值和属性,这时候就可以直接继承Role类:

public class VipRole extends Role{
	// VipRole类继承Role类
	private String action;

	public VipRole() {
		
	}

	public VipRole(String action) {
		this.action = action;
	}

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	
}

最后测试一下能不能成功,编写一个测试类:

public class RoleTest{
	public static void main(String[] args){
		VipRole u = new VipRole();
		u.setLive(100);
		u.setAttr("ordinary");
		u.setAction("fly");
		System.out.println("角色生命值:" + u.getLive() + "角色属性:" + u.getAttr() + "角色行为:" + u.getAction());

	}
}

方法覆盖

先说一下方法重载机制,方法重载又称为overload。

什么条件满足构成方法重载?

  1. 在同一个类中
  2. 方法名相同
  3. 参数列表不同:类型,顺序,个数

方法 重载和什么无关

  1. 方法的返回值类型
  2. 方法的修饰符列表无关

方法的覆盖,又称为方法重写,英文单词override/overwrite
什么时候该使用方法重写
当父类中的方法已经无法满足当前子类的业务需求,子类有必要将父类中继承过来的方法进行重写,这个重写的过程称为方法覆盖/重写
什么条件满足之后构成方法重写

  1. 方法重写发生在具有继承关系的父子类之间
  2. 返回值类型相同,方法名相同,形参列表相同
  3. 访问权限不能更低,可以更高
  4. 抛出异常不能更多,可以更少
public class RoleTest{
	public static void main(String[] args){
		C c = new C();
		c.doSome();//B do some
	}
}
class A{
	public void doSome(){
		System.out.println("A do some");
	}
}

class B extends A{
	public void doSome(){
		System.out.println("B do some");
	}
}

class C extends B{
	
}

私有方法不能继承,所以不能覆盖
构造方法不能继承,所以不能覆盖
静态方法不存在覆盖
覆盖只针对方法,不谈属性

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Java基础 面向对象的三大特征之继承 方法覆盖》 发布于2020-08-09

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

8 + 7 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册