类的继承总结

一、Java继承的语法格式

 

              1.继承的关键字:extends           避免重写代码的麻烦

              2.格式:

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

                  }

               注:Java的继承是单继承,extends后边只能加一个类名。

 

 

二、子类继承到什么?能使用什么?

 

              子类能继承到父类所有的属性和方法。

 

              子类能调用的方法:

                 1.当子类和父类同包时:默认的、受保护的、公有的属性和方法能被子类的对象和子类{}中调用。

                 2.当子类和父类不同包时:子类的对象能调用的只有公有的属性和方法。

                                                          子类{}中能调用的有公有的、受保护的属性和方法。

 

                Java的访问修饰符:private、默认的、protected、public

 

三、方法的重写(OverWrite)

 

              1.实现方法重写的条件:

                       1.必须存在继承关系

                       2.返回值数据类型、方法名、参数类型、参数个数、参数顺序必须要和父类完全一致

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

                 默认-->protected-->public

             

              2.调用方法

                       会优先执行子类的方法,子类没有时才会继承父类的方法。

                       如果想调用父类的方法,那么可以使用super.方法名();

                       super用法和this基本类似。重载构造方法中super(属性1,属性2,。。。。)

 

 

四、自动转型

 

                 举例:byte  b = 1;  int i = b;

                          JTextField jte = new JPasswordField();

 

                 写法: 父类   对象名  =  new  子类();  

                             一个大学生是一个学生,但不能反过来说。相当于“ is  a   ”

               

                 问题:无法调用子类自己定义的方法。

                 问题:Java为什么保留自动转型?

                           扩大使用范围。避免重写代码,减小工作量。

 

 

五、多态的实现

 

             多态指相同类型的对象调用相同的方法时,由于继承和重写机制,得到的结果不一定相同。

 

 

六、代码

 

回合制游戏:奥特曼和小怪兽要战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
  奥特曼除了可以打小怪兽外,还可以攻击其他的奥特曼对象。
  小怪兽除了可以打奥特曼外,还可以攻击其他的小怪兽对象。

 

               分析:1.设置Man类,定义各种属性、方法

                          2.设置Outman类、Monster类,继承自Man类

                          3.在主函数中实例化outman、monster时用自动转型的方法可以直接使用父类的方法

                          4. 完成编写

             注:(一方面为了显示方便、一方面对上节课的复习,把最终结果放到一个窗体上显示出来。其中使用了JTextArea类。           

                jte.setColumns(23);//设置JTextArea的列数
                jte.setRows(19);//设置JTextArea的行数
                jte.setEditable(false);//不可编辑

                append 将给定文本追加到文档结尾        insert 将指定文本插入指定位置)这些都不是重点,重点是类的继承和自动转型的使用

 

 

 

 

   /**
     * 定义一个Man类
     * @author Administrator
     *
     */
public class Man {
	
	private String name;
	private int hp;
	private int atp;
	
	
	//重载一个构造方法
	protected Man(String name,int hp,int atp){
		this.name = name;
		this.hp = hp;
		this.atp = atp;
	}
	
	//设置名字属性的方法
	public void setName(String name){
			this.name = name;
	}
	//获取名字属性的方法
	public String getName(){
		return name;
	}
	
	//设置血量属性的方法
	public void setHp(int hp){
		this.hp = hp;
	}
	//获取血量属性的方法
	public int getHp(){
		return hp;
	}
	
	//设置攻击力点数属性的方法
	public void setATP(int atp){
		this.atp = atp;
	}
	//获取攻击力点数的方法
	public int getATP(){
		return atp;
	}
	
	//设置对对手造成伤害的方法
    public int fight(Man newman){
          
              newman.setHp(newman.getHp() - atp);
              newman.getHp();
             // System.out.print(name+" 对 "+newman.getName()+" 造成 "+atp+" 点伤害。");
           
              return newman.getHp();
    }
	
	

}

 

 /**
    * 定义一个Monster类,该类继承自Man类
    * @author Administrator
    *
    */
public class Monster extends Man{
	
	//构造方法的重载
	protected Monster(String name,int hp,int atp){
		super(name,hp,atp);
	}

}

 

    /**
      * 定义一个奥特曼类,该类继承自Man类
      * @author Administrator
      *
      */
public class Outman extends Man{
	
	//重载一个构造方法
	protected Outman(String name,int hp,int atp){
		super(name,hp,atp);
	}

}

 

import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JTextArea;
    /**
     * 定义一个Fight类
     * @author Administrator
     *
     */
public class Fight {

	/**
	 * 入口主函数
	 * @param args
	 */
	public static void main(String[] args) {
		
		//实例化两个Outman类的对象、两个Monster类的对象
		Man outman1 = new Outman("杰克奥特曼",500,200);
		Man outman2 = new Outman("艾斯奥特曼",600,160);
		Man monster1 = new Monster("怪兽一",400,220);
		Man monster2 = new Monster("怪兽二",550,170);
		
		//实例化一个窗体
		Fight showFrame = new Fight();
		showFrame.initGUI(outman1,outman2,monster1,monster2);
		
        //实例化三次战斗
		//new Fight().twoFight(outman1, monster1);
		//outman1.setHp(5000);
	    //monster1.setHp(4000);
		//new Fight().twoFight(outman1, outman2);
		//new Fight().twoFight(monster1, monster2);
	}
	 
	//定义一个窗体
	public void initGUI(Man outman1,Man outman2,Man monster1,Man monster2) {
		JFrame jf = new JFrame();
		
		jf.setTitle("PK界面");//设置窗体的标题
		jf.setSize(800, 400);//设置窗体的大小
		jf.setLocation(300,150);//设置窗体位置
		jf.setDefaultCloseOperation(3);//设置关闭时退出程序
		jf.setResizable(true);//设置能调整窗口大小
		jf.setLayout(new FlowLayout());//设置窗体布局
		
		//调用战斗函数
		new Fight().twoFight(outman1,monster1,jf);
		outman1.setHp(500);monster1.setHp(400);
		new Fight().twoFight(outman1,outman2,jf);
		new Fight().twoFight(monster1,monster2,jf);
		
		
		//设置窗体可见
		jf.setVisible(true);
	}
	
	
	//定义战斗函数
	public void twoFight(Man m1,Man m2,JFrame jf){
		
		//实例化一个JTextArea类的对象
		JTextArea jte = new JTextArea("\n"+m1.getName()+" 和 "+m2.getName()+" 开始PK"+"\n"+m1.getName()+" 血量为 "+m1.getHp()+"    "+m2.getName()+" 血量为 "+m2.getHp()+"\n"+m2.getName()+" 率先攻击\n");
		jte.setColumns(23);//设置JTextArea的列数
		jte.setRows(19);//设置JTextArea的行数
		jte.setEditable(false);//不可编辑
		jf.add(jte);
			
		//战斗方法
		while(m1.getHp()>0&&m2.getHp()>0){
			m2.fight(m1);
			jte.append(m2.getName()+" 对 "+m1.getName()+" 造成 "+m2.getATP()+" 点伤害\n");
			if(m1.getHp()<=0)
				break;
			else{
				jte.append(m1.getName()+" 血量减少 "+m2.getATP()+" 点,血量剩余 "+m1.getHp()+" 点\n");
			    m1.fight(m2);
			    jte.append(m1.getName()+" 对 "+m2.getName()+" 造成 "+m1.getATP()+" 点伤害。\n");
			    jte.append(m2.getName()+" 血量减少 "+m1.getATP()+" 点,血量剩余 "+m2.getHp()+" 点\n");
			}
	    }
		if(m2.getHp()<=0)
			jte.append(m2.getName()+" 血量为零 "+"\n"+m1.getName()+" 取得胜利\n");
		else
			jte.append(m1.getName()+" 血量为零 "+"\n"+m2.getName()+" 取得胜利\n");

		
	}


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值