`
wz94
  • 浏览: 30941 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

类的继承总结

阅读更多

一、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
分享到:
评论
2 楼 wz94 2013-07-23  
子类实例化的对象不能调用,不过子类中可以调用
1 楼 yourc 2013-07-21  
“ 2.当子类和父类不同包时:子类的对象能调用的只有公有的属性和方法。”
   这句话什么意思,受保护的方法和属性不能被子类对象调用?

相关推荐

    封装继承多态总结

    封装继承多态总结

    JAVA中的继承学习总结

    JAVA中的继承学习总结JAVA中的继承学习总结

    继承和抽象类的总结

    这个文档总结概括了继承和抽象类的相关知识以及需要注意的事项

    继承与派生总结

    c++继承与派生总结 面向对象的程序设计中提供了类的继承机制,允许...以原有的类为基础产生新的类,我们就说新类继承了原有类的特征,也就是说从原有类派生了新类。 类的派生机制的好处在于:代码的重用和可扩充性。

    Java实验报告——类的继承、多态的应用

    1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    C++类总结多态继承

    C++中类的总结,适合毕业找工作,或新手突击C++用

    Java方法继承、方法重载、方法覆盖总结

    Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。

    关于类与继承和相关基础东西总结

    NULL 博文链接:https://java--hhf.iteye.com/blog/1699633

    MinGW如何存储对象、如何实现类继承、 多态.pptx

    通过代码举例总结的的方式,对c++的类对象在MinGW编译器中存储的机制,以及继承、多态等c++特性的实现机制。

    类的继承与代码的复用

    {实验报告需单独下载,不过源代码里有注释} ...总结:先建立一个抽象类shape,然后建立一个核心类求体积(面积*高),再建立各种实例图形(对抽象类的继承),直接可输出图形体积,即实现了代码的复用。

    《java面向对象程序设计-继承和多态》教案.doc

    } 创建接口的步骤 2-2 接口使用示例 总结 封装、继承和多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的...

    java语言内部类总结

    定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。

    【JavaScript源代码】深入JS继承.docx

     目录 前言准备总结继承的n种方式原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合式继承结束语 前言 准备 总结 继承的n种方式 原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合...

    C++程序设计,主要为C++语言简介、面向对象的基本概念、类和对象进阶、运算符重载、类的继承与派生、多态与虚函数等章节总结

    内容主要为:C++语言简介、面向对象的基本概念、类和对象进阶、运算符重载、类的继承与派生、多态与虚函数、输入/输出流、文件操作、函数模板与类模板九个章节的相关知识点总结,其中包括知识点介绍,知识点分析,...

    在JavaScript中模拟类(class)及类的继承关系

    今天我主要谈谈Javascipt中模拟“类”的方法及js中继承的总结和回顾。 js中实现“类”与继承,既是重点,又是难点。很多同学可能都对js中“类”与继承都有所了解,但是深入剖析的时候,感觉力不从心、模棱两可。 ...

    JavaScript类的继承操作实例总结

    本文实例总结了JavaScript类的继承操作。分享给大家供大家参考,具体如下: 一、类式继承 首先要做的是创建构造函数。按惯例,其名称就是类名,首字母应该大写。在构造函数中,创建实例属性要用关键字this 。类的...

    Ruby类继承、抽象类、类拓展混入、代理类实例

    1、类继承: 当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=&gt;”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法...

Global site tag (gtag.js) - Google Analytics