目录
继承
多态
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);}@Overridepublic 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);}@Overridepublic 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 √ √ √ √