1.为什么要用继承
因为子类中的属性和方法与总父类中方法与属性相似,为节省代码(子类多对象是更能体现),子类直接继承父类中的全部属性和
方法,虽然都继承了,但因为权限不一样,子类可能不能调用父类中的方法
2.继承
2.1继承关键字 extends 一个类只能继承一个父类
2.2继承基本格式
public class 类名(子类,超类,派生类) extends 类名(父类,基类){
}
3.继承使用权限
3.1 子类继承父类的全部方法和属性
3.2 子类和父类在同一个包下,子类可以调用的方法和属性
只有私有的属性和方法不可以调用
3.3 子类和父类不再同一个包下,子类可以调用的属性和方法
受保护的和公用的
不同包差别在于默认的属性和方法
4.方法的重写
条件 4.1必须具有继承关系
4.2方法的名称,返回值,参数的类型,顺序,个数必须与类中的方法一职(与重载的区别)
4.3子类方法的权限不能小于父类的权限
5.自动转型
必须存在继承关系
格式 父类名 对象名=new 子类名();
自动转型编译错误的原因
1.变异机制的文=问题
2.java在编译时只会根据对象名的类型进行一一编译
会将你调用方法拿到父类中进行一一比较,如果找不到你调用的方法,则直接抛出编译错误
6.多态
多态是由方法重载,继承,方法重写,自动转型等技术的组合。每个人是不同的,虽然同属一个人类。
7.练习
1.回合制游戏:奥托曼可以攻击小怪兽,奥托曼可以攻击其他的奥托曼,
知道一方的血量为0的时候结束战斗,输出谁胜利了!
package jicheng0629;
public class Manager {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Outman out01=new BigOutman();
BigOutman out02=new BigOutman();
Monster mon=new Monster();
out01.setName("奥特曼");
out02.setName("小奥特曼");
mon.setName("怪兽");
out01.setBlood(10);
out02.setBlood(11);
mon.setBlood(9);
while(out01.getBlood()>0&&out02.getBlood()>0&&mon.getBlood()>0){
if(out01.getBlood()>0) out01.fight(mon);
if(out01.getBlood()>0) out01.fight(out02);
if(out02.getBlood()>0) out02.fight(mon);
if(out02.getBlood()>0) out02.fight(out01);
if(mon.getBlood()>0) mon.fight(out02);
if(mon.getBlood()>0) mon.fight(out01);
}
}
}
package jicheng0629;
public class BigOutman extends Outman {
public void fight(Monster mon){
mon.setBlood(mon.getBlood()-3);
System.out.println(mon.getName()+"受到攻击,血量为"+mon.getBlood());
if(mon.getBlood()<=0)System.out.println(mon.getName()+"战死了");
}
}
package jicheng0629;
public class Monster extends Outman{
private String name;//定义名字属性
private int blood;//定义血量属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public void fight(Outman out){
out.setBlood(out.getBlood()-5);
System.out.println(out.getName()+"受到攻击,血量为"+out.getBlood());
if(out.getBlood()<=0)
System.out.println(out.getName()+"战死了");
}
}
package jicheng0629;
//建立奥特曼类
public class Outman {
private String name;//定义名字属性
private int blood;//定义血量属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
// public void fight(Monster mon){
// mon.setBlood(mon.getBlood()-1);
// System.out.println(mon.getName()+"受到攻击,血量为"+mon.getBlood());
// if(mon.getBlood()<=0)
// System.out.println(mon.getName()+"战死了");
// }
public void fight(Outman out){
out.setBlood(out.getBlood()-2);
// System.out.println(out.getName()+"受到攻击,血量为"+out.getBlood());
// if(out.getBlood()<=0)System.out.println(out.getName()+"战死了");
}
}