-
以人为示例:
-
人类: 姓名 年龄 两只眼睛 直立行走 思考
-
学生类:学号 分数 上课 学习 考试
-
大学生类: 专业 学分 学习的科目 考 CET
-
中学生类: 中学数学 中学语文
-
小学生类: 小学数学 小学语文
-
-
-
注意:
-
上一级类作为下一级类的父类
-
下级类作为上级类的子类 ( 扩展类 )
-
任何一个类只能有一个直接父类 ,可以有多个直系父类 ( 父类的父类也是我的父类 )
-
父类比较抽象 ,子类更加具体
-
什么时候可以选择继承一个类? 子类继承父类后 继续扩展改造新的功能
-
Java 中 任何类都默认有一个父类,叫做 Object 类
-
禁止一个类可以被继承,可以使用 final 修饰这个类 (final 修饰的类不能有子类 )
-
格式: public class 子类名 extends 父类名 { }
-
-
作用:
-
1 : 子类可以直接继承父类的属性和方法多个子类共用的属性和方法都可以定义在父类中,子类只需要继承就可以了
-
2 : 一个对象可以拥有多重类型 ,除了自己本类,还有所有的父类类型
-
3 : 方法重写: 某一个方法,所有的子类都有,但是每个子类的方法内容不一样子类中重写父类的方法,要求格式一样,但是内容可变
-
但是会优先调用重写之后的方法
-
动物类: 吃
-
狮子老虎: 吃
-
牛羊:吃
代码样例:
// 好汉 类 public class Hero { String name; String id; int hp; int ad; int df; int speed; public void showInfo() { System.out.println("name='" + name + '\'' + ", id='" + id + '\'' + ", hp=" + hp + ", ad=" + ad + ", df=" + df + ", speed=" + speed); } public void showTime() { System.out.println("---" + name + "精彩时刻-----"); } }
public class SongJiang extends Hero { public void showTime() { super.showTime();// super 指代父类 调用父类的方法 System.out.println(name + "此人是108好汉的大哥"); } public void run1000KM() { System.out.println(name + "独有技能"); } public void atk(Hero lzs) { int num = (int) (10 + ad * 1.5 + speed * 0.8); num -= lzs.df; if (num > 0) { lzs.hp -= num; System.out.println(name + "给了" + lzs.name + "一脚,使其HP减少了" + num + "点。其还剩下" + lzs.hp); } else { System.out.println(name + "给了" + lzs.name + "一脚,并未造成伤害~"); } } }
public class Game { public static void main(String[] args) { SongJiang songJiang = new SongJiang(); songJiang.ad = 20; songJiang.name = "宋江"; songJiang.id = "及时雨"; songJiang.df = 50; songJiang.hp = 150; songJiang.speed = 100; songJiang.showInfo(); LuZhiSheng lzs = new LuZhiSheng(); lzs.ad = 200; lzs.name = "鲁智深"; lzs.id = "花和尚"; lzs.df = 999; lzs.hp = 999; lzs.speed = 10; lzs.showInfo(); songJiang.showTime(); lzs.showTime(); // 在不同类型下 要确定可以使用的属性以及方法 Hero hero= songJiang;// 转为好汉宋江 hero.showTime(); hero.showInfo(); songJiang.run1000KM(); songJiang.atk(lzs); lzs.atk(songJiang); Wu ws = new Wu(); ws.ad = 280; ws.name = "武松"; ws.id = "打虎英雄"; ws.df = 100; ws.hp = 300; ws.speed = 50; ws.showInfo(); songJiang.atk(ws); } }
public class LuZhiSheng extends Hero { public void showTime() { super.showTime(); System.out.println(name + "此人曾经倒拔垂杨柳"); System.out.println("此人曾经拳打镇关西"); } public void atk(SongJiang sj) { int num = (int) (10 + ad * 1.5); num -= sj.df; if (num > 0) { sj.hp -= num; System.out.println(name + "给了" + sj.name + "一拳,使其HP减少了" + num + "点。其还剩下" + sj.hp); } else { System.out.println(name + "给了" + sj.name + "一拳,并未造成伤害~"); } } } package oop.zyf0725oop ; public class Wu extends Hero{ }
-