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()+"战死了"); } }
相关推荐
java的继承总结.doc
圣诞树python-32-继承总结.ev4.rar
python 零基础学习篇
封装继承多态总结
JAVA中的继承学习总结JAVA中的继承学习总结
c++继承与派生总结 面向对象的程序设计中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体、更详细的类的定义。以原有的类为基础产生新的类,我们就说新类继承了原有类的特征,也就是说从原有类...
<本简缩教程的内容有: 1.创建类:类关键字、类及名空间、创建方法、创建属性、重载方法等。 2.... 3.继承:实现基本的继承、阻止继承、继承与辖域、保护方法、重载方法、重载与 构造方法、创建基类以及... 总结
Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。
这个文档总结概括了继承和抽象类的相关知识以及需要注意的事项
C++三种继承方式总结,帮你快速理解继承,进入C++高手
3.5继承总结 6 4、多态 6 4.1多态 6 4.1.1问题引出 6 4.1.2面向对象新需求 6 4.1.3解决方案 6 4.1.4多态实例 6 4.1.5多态工程意义 6 4.1.6多态成立的条件 6 4.1.7多态的理论基础 6 4.2多态相关面试题 6 面试题1:请...
C++之继承思维导图的总结
C#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdf C#第六章 初始继承和多态.pdfC#第六章 初始继承和多态.pdf
ES5中的继承 一 原型链继承 原型链继承的原理:直接让子类的原型对象指向父类实例,当子类实例找不到对应的属性和方法时,就会往它的原型对象,也就是父类实例上找,从而实现对父类的属性和方法的继承。 // 父类 ...
maven总结笔记-继承和聚合
目录 前言准备总结继承的n种方式原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合式继承结束语 前言 准备 总结 继承的n种方式 原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合...
1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。
C++中类的总结,适合毕业找工作,或新手突击C++用
菱形继承是多重继承中跑不掉的,Java拿掉了多重继承,辅之以接口。C++中虽然没有明确说明接口这种东西,但是只有纯虚函数的类可以看作Java中的接口。在多重继承中建议使用“接口”,来避免多重继承中可能出现的各种...
自己写的C#继承代码,刚开始学习的时候觉得比较困难,就总结了一下,免费的资源希望可以给大家带来帮助。