继承 + 多态 + final + 权限修饰符

目录

继承

多态

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,"鱼");
          }
      }
      

       

final

  • final        
    • 方法:表明方法是最终方法,不能被重写
    • 类:表明类是最终类,不能被继承
    • 变量:叫做常量,只能被赋值一次
      • final修饰的变量是基本类型:变量存储的数据值不能发生改变
      • final修饰的变量是引用类型:变量存储的地址值不能发生改变,但对象内部可以变
  • 案例:更加安全

权限修饰符

  • 修饰符种类
    修饰符同一个类中同一个包中
    其他类
    不同包下的
    子类
    不同包下的
    无关类
    private
    空值不写
    protected
    public

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值