代码的优化——JAVA类的继承

代码的优化——JAVA类的继承

         就像子女会继承父母的优良特点一样,Java语言中有这样一种方法——类的继承。

为什么要使用类的继承

         我们举个浅显明了的例子,**老师在教大学生英语,那么这位老师是否可以教高中生英语,初中生英语,...呢?对于这个程序,我们首先要定义至少四个类,分别是老师,大学生高中生,初中生,经过观察可发现,后三者之间含有的共同点便是学生,因此,我们便可只定义一个学生类,其他三个类继承这一个类的属性和方法,这样便可大大优化代码的重用性和程序的扩展性。

类的继承的语法规则

         Java继承的关键字是extend,格式是

public  class 类名(子类名、派生类、超类)  extend  类名(父类、基类)

         现实生活中如同父母与子女之间的关系需要用到继承,而在java语言中,类似于学生与大学生这样的关系就可以用到继承,简而言之便是包含关系。

方法的重写

         java的继承意味着子类所有的属性和方法都跟父类完全一致,当子类需要自定义的方法时,又该如何做呢?这时候我们便需要一个新的方法——方法的重写。需要强调的是,方法的重写固然能实现代码的优化,但它是需要条件的,在此之前,先介绍一下下面会多次重复出现的修饰符。

在数据类型前出现的关键字就是修饰符比如:private String name,int age,protected  int blood,public char sex...修饰符的作用是设置属性和方法的访问范围:

  访问修饰符 同类中 同包中 不同包中 不同包但是有继承关系的子类中

private 可以 不可以 不可以 不可以
默认的 可以可以 不可以 不可以
protected 可以 可以 不可以可以
public 可以 可以 可以可以

修饰符的大小范围由上而下递增,对于方法的重写而言,需要的条件便是:

         1.两个类之间必须要存在继承关系;

 2.子类在重写方法时,子类方法的访问修饰符可以大于或等于父类方法的访问修饰符;

 3.子类重写方法时,子类方法的返回值类型,方法名,参数,都必须和父类的完全一致;

 4.方法中的代码必须要不同

此外,需要注意的事,有两类方法是不能被重写的:1.private修饰符的方法;2.final修饰符的方法

那么,重写了方法之后的两个类,程序中调用的会是哪个方法呢?

这里,需要确定是的,调用的是new后面的类名的方法。

实战演练——奥特曼打小怪兽

回合制对战游戏:奥特曼A和小怪兽A进行pK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼A胜利,则奥特曼A要和奥特曼B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果小怪兽A胜利,则小怪兽A要和小怪兽B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
要求:类中只能有一个攻击方法,攻击的对象也只能有一个。
首先奥特曼类和小怪兽类可由一个类定义其血量和名称,由于两者攻击的方式不同,所以怪兽类可继承自超人类并在其基础上进行方法的重写。代码如下:

//定义一个magic类
public class Superman {
 
//定义名称属性和血量属性
public String name;
public  int blood;
//定义战斗的方法
public void fight(Superman man){
man.blood-=2;
if(man.blood==0){
System.out.println(name +"获胜!");
}
}
}



//定义一个beast类,该类继承自Superman类
public class beast extends Superman {
//重写子类中战斗的方法
public void fight(Superman man){
man.blood--;
if(man.blood==0){
System.out.println(name +"获胜!");
}

}
}

//定义一个battle类
public class battle {
public static void main(String[] args) {
Superman A = new Superman();

      A.name ="奥特曼A";
A.blood = 10;

beast a = new beast();

a.name = "小怪兽A";
a.blood = 8;

Superman B = new Superman();

B.name = "奥特曼B";
B.blood = 12;

beast b = new beast();

b.name ="小怪兽B";
b.blood = 10;

while((a.blood*A.blood>0)){
A.fight(a);
a.fight(A);
}

if(a.blood==0){

while((A.blood*B.blood>0)){
A.fight(B);
B.fight(A);
}
}


if(A.blood==0){
while((a.blood*b.blood>0)){
a.fight(b);
b.fight(a);
}
}
}


}

总结

类的继承实现了代码的重用性和程序的扩展性,在提高编程速度和程序运行速度等方法都会给我们带来巨大的效益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值