继承、访问限权、重载转型

一、继承

  1. 理解定义:继承就是一个物获得另一个物的东西,在java中就是一个类(子类)获得另一个类(父类)的属性和方法,子类在此基础上还可以延伸拓展。
  2. 关键字:extends
  3. 格式:public class 类名 extends 父类 { }
  4. 作用:在已有基础上继续进行功能的扩充;消除结构定义上的重复,使代码简洁高效。
  5. 现实生活中的“继承”关系:
    西瓜—水果; 木桌子----木头; 金鱼—鱼类;大学生----学生;
  6. :object是所有其他类的父类;Java中不允许多重继承,但是允许多层继承!多层继承一般不会超过三层
  7. 代码应用
public class person {
	 String name;
	int age;
	
	//父类的构造方法
	public String getName(){
	return name;
	}
	public void setName(String name){
	this.name=name;
	}
	public int getAge(){
		return age;
		}
		public void setAge(int age){
		this.age=age;
		}
}
public class student extends person{
	String hobby;
	
	//添加子类的延伸属性
	public String getHobby(){
		return hobby;
		}
		public void setHobby(String hobby){
		this.hobby=hobby;
		}	
}

public class test1 {
	public static void main(String[] args)
    {
        student student=new student();
        student.setName("爱丽丝");
        student.setAge(18);
        student.setHobby("爱吃冰淇淋");
        System.out.println("   姓名:"+student.getName() +"   年龄:"+student.getAge()+"    爱好:"+student.getHobby());
    }
}

输出:

姓名:爱丽丝   年龄:18    爱好:爱吃冰淇淋

通过以上代码我们发现,子类可父类发生了继承关系之后,子类不仅可以直接继承父类的属性和方法,实现代码的重用,还可以拓展延伸功能。

二、访问权限

何为访问限权?即控制被修饰的内容能在哪些范围使用。

          当前类		同包下的子类	   不同包下的子类	   不同包下的非子类
public		ok			ok				ok				ok
	
protected	ok			ok				ok
	
缺省		ok			ok
	
private		ok

public:最海纳百川,在哪都可以调用它,整个工程下,同一个包下的不同类中,不同包下的不同类下等等;
private:私有的,只能自己用,只能在当前类下使用,出了当前类均不可以用
protected:被保护的,它的容量比public小一些,出了不同包下的子类的花括号就不可以使用,即不能在不同包下的非子类使用
缺省:前面啥也不写,有点默认的意思,它的功能比private强大点,可以在当前类和同一个package下的子类当中使用。

子类能拥有父类的哪些属性和方法?
子类继承父类,能拥有父类所有的属性和方法。部分属性和方法限于访问权限,不能直接使用。
1.子类会继承父类的所有成员 。但是父类对象中的私有属性和方法,子类是无法访问到,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。比如说是你父亲将家里的银行卡继承给了你,但是没有告诉你密码,你还是不能使用的,除非有密码,而在这里的密码就指的是getter和setter方法,如果父类中有getter方法,那么私有属性你是可以通过getter方法访问的。是的 就像是有了你爸爸才会有你
2.父类因为有私有属性不能被子类访问,复制这个说法应该不对 而且父类和子类是不能用内部类来相互定义的 内部类可以直接访问外部类的元素(包括私有域),要是将父类当成内部类岂不是分类可以访问子类独有的方法,显然是不可以的。

三、重写 和 转型

重写:父类的方法不能满足子类的需要,则子类可以重写父类的方法。
要求:

  1. 必须有继承关系。
  2. 父类的方法在子类中可见。
  3. 方法的声明,访问权限可以扩大,其他(返回值类型、方法名、参数)必须一致。

自动转型:子类对象可以自动的变为父类类型的对象。
自动转型后,方法的调用以子类为准

场景练习

要求:
1、诸葛亮和李白PK,采用回合制,每次攻击让对方的血量减少,减少量为攻击方的攻击值。重复,直到某一方的血量小于等于0,胜利的一方继续和主宰PK, 主宰每次攻击让对方的血量减少,减少量为主宰的两倍攻击值。重复直到某一方的血量小于等于0;

2、每个类至多有一个攻击方法;

3、输出:战斗的过程、结果。
代码如下:
父类

public class Hero {
	String name;
	String skill;	
	int ad;
	int hp;
		//攻击方法1
	public void attack1(Hero lb){		
		lb.hp=lb.hp-ad;
		System .out.println(name+"使用"+skill+"攻击了"+lb.name+"使其失去了"+ad+"点生命值,剩余了"+lb.hp+"点。");
	}
	//攻击方法2
    public void attack2(Hero lb){		
		lb.hp=lb.hp-2*ad;
		System .out.println(name+"使用"+skill+"攻击了"+lb.name+"使其失去了"+2*ad+"点生命值,剩余了"+lb.hp+"点。");
	}
}

子类1

public class Zhugeliang extends Hero {
	
}

子类2

public class Libai extends Hero {
		
}

子类3

public class Zhuzai extends Hero {
	
}

主方法运行

public class VTest {
	public static void main(String[] args) {
		System.out.println("游戏开始--->>>>");
		
		//实例化对象
		
		
		Hero zgl  = new Zhugeliang();
		
		Hero lb =new Hero();
		
		Hero zz =new Hero();
		
		//给对象赋值
		lb.name="李白";
		lb.skill="神来之笔";
		lb.ad=99;
		lb.hp=998;
		
		zgl.name="诸葛亮";
		zgl.skill="元气弹";
		zgl.ad=85;
		zgl.hp=1486;
		
		zz.name="主宰";
		zz.skill="末日狂欢";
		zz.ad=80;
		zz.hp=1200;
		
							
		System.err.println("准备就绪!");
		System.out.println("开始PK");
		
		
		//作战运行条件
		while(lb.hp>0&&zgl.hp>0){
			
		lb.attack1(zgl);
		
		if(zgl.hp>0){
			zgl.attack1(lb);
		}		
		}

//胜利的一方与主宰作战
		while(lb.hp>0&&zz.hp>0){			
			zz.attack2(lb);
			if(lb.hp>0){
				lb.attack2(zz);	
			}
		}
		
					
		while(zgl.hp>0&&zz.hp>0){
			zz.attack2(zgl);
			if(zgl.hp>0){
				zgl.attack2(zz);	
			}
		}
	
		
	//输出结果
            if(zgl.hp<0&&zz.hp<0){			
		
			System.out.println("李白Win!");	
		}
		else if(zgl.hp<0&&lb.hp<0){
			System.out.println("主宰Win!");
		}
		else if(zz.hp<0&&lb.hp<0){
			System.out.println("诸葛亮Win!");   
		}
	
}
}

输出结果:

游戏开始--->>>>
准备就绪!
开始PK
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了1387点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了913点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了1288点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了828点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了1189点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了743点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了1090点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了658点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了991点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了573点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了892点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了488点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了793点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了403点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了694点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了318点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了595点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了233点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了496点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了148点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了397点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了63点。
李白使用神来之笔攻击了诸葛亮使其失去了99点生命值,剩余了298点。
诸葛亮使用元气弹攻击了李白使其失去了85点生命值,剩余了-22点。
主宰使用末日狂欢攻击了诸葛亮使其失去了160点生命值,剩余了138点。
诸葛亮使用元气弹攻击了主宰使其失去了170点生命值,剩余了1030点。
主宰使用末日狂欢攻击了诸葛亮使其失去了160点生命值,剩余了-22点。
主宰Win!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值