一、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"); } }
相关推荐
封装继承多态总结
JAVA中的继承学习总结JAVA中的继承学习总结
这个文档总结概括了继承和抽象类的相关知识以及需要注意的事项
c++继承与派生总结 面向对象的程序设计中提供了类的继承机制,允许...以原有的类为基础产生新的类,我们就说新类继承了原有类的特征,也就是说从原有类派生了新类。 类的派生机制的好处在于:代码的重用和可扩充性。
1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
C++中类的总结,适合毕业找工作,或新手突击C++用
Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。
NULL 博文链接:https://java--hhf.iteye.com/blog/1699633
通过代码举例总结的的方式,对c++的类对象在MinGW编译器中存储的机制,以及继承、多态等c++特性的实现机制。
{实验报告需单独下载,不过源代码里有注释} ...总结:先建立一个抽象类shape,然后建立一个核心类求体积(面积*高),再建立各种实例图形(对抽象类的继承),直接可输出图形体积,即实现了代码的复用。
} 创建接口的步骤 2-2 接口使用示例 总结 封装、继承和多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的...
定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。
目录 前言准备总结继承的n种方式原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合式继承结束语 前言 准备 总结 继承的n种方式 原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合...
内容主要为:C++语言简介、面向对象的基本概念、类和对象进阶、运算符重载、类的继承与派生、多态与虚函数、输入/输出流、文件操作、函数模板与类模板九个章节的相关知识点总结,其中包括知识点介绍,知识点分析,...
今天我主要谈谈Javascipt中模拟“类”的方法及js中继承的总结和回顾。 js中实现“类”与继承,既是重点,又是难点。很多同学可能都对js中“类”与继承都有所了解,但是深入剖析的时候,感觉力不从心、模棱两可。 ...
本文实例总结了JavaScript类的继承操作。分享给大家供大家参考,具体如下: 一、类式继承 首先要做的是创建构造函数。按惯例,其名称就是类名,首字母应该大写。在构造函数中,创建实例属性要用关键字this 。类的...
1、类继承: 当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=>”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法...