目录
继承
多态
final
权限修饰符
继承
- 继承定义:
- 可以让类跟类之间产生子父的关系
- 继承的好处
- 可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码几余,提高代码的复用性
- 子类继承内容
非私有 private 构造方法 × × 成员变量 √ √(不能用) 成员方法 能添加到虚方法表 √ 不能添加到虚方法表 × - 构造方法
多态
- 根据传递对象的不同,调用不同的show方法
- 同类型对象,表现出不同的形态
- 多态的前提
- 有继承关系
- 有父类引用指向子类对象
- 有方法重写
- 案例
- 人类
package com.duotai; public class Person { private String name; private String age; public Person() { } public Person(String name, String age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public void show(){ System.out.println("我执行了吗"); } }
- 学生类
package com.duotai; public class Student extends Person { public void show(){ System.out.println("学生:" + getName() + getAge()); } }
- 老师类
package com.duotai; public class Teacher extends Person{ public void show(){ System.out.println("老师:" + getName() + getAge()); } }
- 测试类
package com.duotai; public class Test { public static void main(String[] args) { Student student = new Student(); student.setName("小敏"); student.setAge("6"); Teacher teacher = new Teacher(); teacher.setName("王老师"); teacher.setAge("29"); register(student); register(teacher); } public static void register(Person p){ p.show(); } }
- 结果
- 人类
- 多态调用成员变量的特点
- 变量调用:编译看左边、运行看右边
- 方法调用:编译看左边、运行观看右边
- 案例
根据需求完成代码: 1.定义狗类 属性: 年龄,颜色 行为: eat(String something)(something表示吃的东西) 看家lookHome方法(无参数) 2.定义猫类 属性: 年龄,颜色 行为: eat(String something)方法(something表示吃的东西) 逮老鼠catchMouse方法(无参数) 3.定义Person类//饲养员 属性: 姓名,年龄 行为: keepPet(Dog dog,String something)方法 功能:喂养宠物狗,something表示喂养的东西 行为: keepPet(Cat cat,String something)方法 功能:喂养宠物猫,something表示喂养的东西 生成空参有参构造,set和get方法 4.定义测试类(完成以下打印效果): keepPet(Dog dog,String somethind)方法打印内容如下: 年龄为30岁的老王养了一只黑颜色的2岁的狗 2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃 keepPet(Cat cat,String somethind)方法打印内容如下: 年龄为25岁的老李养了一只灰颜色的3岁的猫 3岁的灰颜色的猫眯着眼睛侧着头吃鱼 5.思考: 1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处? 2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?
- Animal类
package com.duotai.test; public class animal { private int age; private String color; public animal() { } public animal(int age, String color) { this.age = age; this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void eat(String something){ System.out.println("动物在吃" + something); } }
- Cat类
package com.duotai.test; public class Cat extends animal{ public Cat() { } public Cat(int age, String color) { super(age, color); } @Override public void eat(String something){ System.out.println(getAge() + "岁的" + getColor() + "颜色的猫吃" + something); } public void cathMouse(){ System.out.println("猫抓老鼠"); } }
- Dog类
package com.duotai.test; public class Dog extends animal { public Dog() { } public Dog(int age, String color) { super(age, color); } @Override public void eat(String something){ System.out.println(getAge() + "岁的" + getColor() + "颜色的狗吃" + something); } public void LookHome(){ System.out.println("狗在看家"); } }
- Person类
package com.duotai.test; public class Person { private String name; private int age; public Person(){} public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void keepPet(Dog dog,String something){ System.out.println("年龄为" + getAge() + "的" + getName() + "养了一只" + dog.getColor() + "色的狗"); dog.eat(something); } public void keepPet(Cat cat,String something){ System.out.println("年龄为" + getAge() + "的" + getName() + "养了一只" + cat.getColor() + "色的猫"); cat.eat(something); } }
- Test类
package com.duotai.test; public class Test { public static void main(String[] args) { Person person = new Person("老王",25); Dog dog = new Dog(2, "黑"); person.keepPet(dog,"骨头"); Person person1 = new Person("小李", 15); Cat cat = new Cat(1, "黄"); person1.keepPet(cat,"鱼"); } }
- Animal类
final
- final
- 方法:表明方法是最终方法,不能被重写
- 类:表明类是最终类,不能被继承
- 变量:叫做常量,只能被赋值一次
- final修饰的变量是基本类型:变量存储的数据值不能发生改变
- final修饰的变量是引用类型:变量存储的地址值不能发生改变,但对象内部可以变
- 案例:更加安全
权限修饰符
- 修饰符种类
修饰符 同一个类中 同一个包中
其他类不同包下的
子类不同包下的
无关类private √ 空值不写 √ √ protected √ √ √ public √ √ √ √