我的总结3《继承》

我的总结3《继承》

1.格式:
java继承的关键字是:extends
格式: (基类和超类)
public class 类名(子类名) extends 类名(父类名) {

}
注意:Java中类的继承是单继承

2.子类继承到了父类的那些属性和方法:
所有的属性和方法(构造方法除外)。
private ,protected ,默认的 ,public
但private的子类不能直接使用

3•能调用的属性的方法:
1.子类和父类在同一个包下:
私有的属和私有的方法不能被子类或子类对象调用。
默认的,受保护的,公有的属性和方法能被子类或子类对象调用。

2.子类和父类在不同的包下:
只有公有的属性和方法能被子类和子类的对象调用。
受保护的属性和方法能被子类调用
私有的和默认的属性和方法不能被子类以及子类的对象调用。

4.方法重写的条件:
1.返回值类型,方法名,参数个数,参数类型,参数顺序必须要相同

2.访问修饰符:子类重写方法的访问修饰分可以大于或者等于父类方法的访问修饰符。
默认的,protected 可以修改为 public

注意:子类中可以对父类的方法进行重写

5.子类可以定义自己的属性和方法。
在创建子类对象时,实际上也创建了父类的对象(参见Test5)

6.若父类中定义了构造方法(没有再写默认的),则子类中必须写出与父类中对应的构造方法,把名字换成子类名,然后运用super()函数。(参见Text1)

7.访问修饰符的范围:
1.private 在类的()里面
2.默认的 在同包的任何类中
3.protected 在同包下和不同包的子类中
4.public 在任何类中都可以

8.对象的自动转型
要实现自动转型必须要存在继承关系。

格式:
1.父类名 对象名 = new 子类构造方法();
2.在另一个类中定义方法时:
该类的方法名(父类名 对象名);
然后在使用该方法时可以传子类的对象名

但请注意!:不能调用子类自己定义的方法。(Java的编译机制引起的问题)

9.多态
多态是由Java的方法重载,继承,方法重写,自动转型等技术的组合。

10.面向对象的三大特性:1.继承 2.多态 3.封装


实验代码:模拟简单游戏,战士和怪兽对打

public class Main {

/**
* @param args
*/
public static void main(String[] args) {

Skill [] skillSol = {new Skill("普通攻击",1),new Skill("暴击",3),new Skill("大招",5)};
Soldiers sol = new Soldiers("战士",10,skillSol);

Skill [] skillBoss = {new Skill("抓",1),new Skill("踢",2),new Skill("咬",3),new Skill("喷火",6)};
Monster boss = new Monster("怪兽",10,skillBoss);

while(sol.getBlood() > 0 && boss.getBlood() >0){

sol.fight(boss);
if(boss.getBlood() <= 0){
System.out.println(sol.getName()+"胜利了!");
break;
}

boss.fight(sol);
if(sol.getBlood() <= 0){
System.out.println(boss.getName()+"胜利了!");
break;
}
}

}

}


import java.util.Random;

public class Man {

private String name;
private int blood;
private Skill[] skill;

public Man(String name, int blood, Skill[] skill) {
this.name = name;
this.blood = blood;
this.skill = skill;
}

public void setName(String n) {
name = n;
}

public String getName() {
return name;
}

public void setBlood(int b) {
blood = b;
}

public int getBlood() {
return blood;
}

public void fight(Man enemy) {
Random rand = new Random();
int value = rand.nextInt(skill.length);
enemy.blood = enemy.blood - skill[value].getPower();
System.out.println(name+"使用了"+skill[value].getName()+"使"+enemy.getName()+"掉血"+skill[value].getPower());

}
}


public class Monster extends Man{

public Monster(String name,int blood, Skill[] skill){
super(name,blood,skill);
}
}

public class Soldiers extends Man {

public Soldiers(String name,int blood, Skill[] skill){
super(name,blood,skill);
}

}

public class Skill {

private String name;
private int power;

public Skill(String name, int power) {
this.name = name;
this.power = power;
}

public String getName() {
return name;
}

public int getPower() {
return power;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值