Day26_7 Java学习之多态与抽象

目录

一、多态

多态的使用场景

二、Java中的抽象的概述:

抽象类的概述:

抽象类的语法定义:

抽象方法的概述:

 抽象方法的语法定义:

使用抽象类与抽象方法的注意事项:

 抽象类与抽象方法的使用场景:

三、模板模式思想

模板模式的概述及作用:

 模板模式的代码演示:

模板方法总结: 


一、多态

  • 多态的使用场景

解析:

1.在继承关系中,当多个子类有相同的行为方法时,调用者并不确定具体的对象,此时我们可以使用多态来解决。

2.Java实现多态有 3 个必要条件:继承、重写和向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中的某些方法进行重写,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

特别注意:上述三步缺一不可,不然就不构成多态体系。

二、Java中的抽象的概述:

  • 抽象类的概述:

解析:

1.一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类。

2.一个类被abstract关键字修饰,那么这个类就是一个抽象类。

3.一个抽象类可以含有或者不含有抽象方法。

  • 抽象类的语法定义:

语法定义:

public abstract class 类名字 { 
  
}

  • 抽象方法的概述:

解析:

1.一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现,也就是没有方法体。

特别注意: abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。 

  •  抽象方法的语法定义:

语法定义:

修饰符 abstract 返回值类型 方法名 (参数列表);

代码演示:

public abstract void add();

  • 使用抽象类与抽象方法的注意事项:

抽象类使用注意事项:

解析:

1.抽象类不能创建对象,如果创建,编译无法通过。只能创建其抽象子类的对象。

2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过。

5.抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。

6.抽象类中不一定有抽象方法,但是有抽象方法的类必被定义为抽象类。

抽象方法的使用注意事项:

解析:

1.抽象方法没有方法体。

2.抽象方法必须存在于抽象类中。

3.子类重写父类时,必须重写父类所有的抽象方法。

4.抽像方法必存在于抽象类中,而抽象类中不一定有抽象方法。

5.在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。

  •  抽象类与抽象方法的使用场景:

解析:

1.当所属类中有抽象方法时,就必须使用抽象类。

2.当父类中的某些方法,必须要子类进行方法重写时,可使用抽象类与抽象方法

3.使用抽象的前提是两个类之间必须存在继承关系。

三、模板模式思想

  • 模板模式的概述及作用:

解析:

1.由抽象类延伸而来的一种思想模式。

2.模板顾名思义就是用来做模板的,它的作用就像是我们所学的各类计算公式,体现的是一个通用性。

特别注意:在使用模板时切记要使用抽象类,迫使其子类必须重写其中的抽象方法,否则就将毫无意义。

  •  模板模式的代码演示:

案例:在动物世界中有猫类与犬类,他们的生存方式都大体一致,只有细节上的不统一,我们可以动物看做一个抽象类,里面有属性name,type,age,行为方法:生存方法,吃饭方法。使用模板模式实现具体代码如下:

Animal动物抽象类:不同的动物吃的东西不一样子,因此将其定义为抽象方法,让其子类重写。

package com.feisi.week3.day2;

/**
 * @author 14491
 * @version 1.0.0
 * @description TODO
 * @date 2022/7/26 16:48
 */
public abstract class Animal {
    String name;
    String type;
    int age;

    public Animal() {
    }

    public Animal(String name, String type, int age) {
        this.name = name;
        this.type = type;
        this.age = age;
    }

    // 动物的生存方法
    public void survival() {
        System.out.println(name +" " + type +" "+ "年龄为:" +age);
        System.out.println("睡觉,休息");
        eat();
        System.out.println("繁衍");
    }

    // 吃饭的抽象方法
    public abstract void eat();
}

两个子类:Dog与Cat

package com.feisi.week3.day2;

/**
 * @author 14491
 * @version 1.0.0
 * @description TODO
 * @date 2022/7/26 17:00
 */
public class Dog extends Animal{

    public Dog() {
    }

    public Dog(String name, String type, int age) {
        super(name, type, age);
    }

    // 重写父类方法
    @Override
    public void eat() {
        System.out.println(name+"吃骨头!!!");
    }
}
package com.feisi.week3.day2;

/**
 * @author 14491
 * @version 1.0.0
 * @description TODO
 * @date 2022/7/26 17:03
 */
public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String name, String type, int age) {
        super(name, type, age);
    }

    // 重写父类抽象方法eat()
    @Override
    public void eat() {
        System.out.println(name+"吃鱼");
    }
}

测试类:

package com.feisi.week3.day2;

/**
 * @author 14491
 * @version 1.0.0
 * @description TODO
 * @date 2022/7/26 17:05
 */
public class AnimalTest {
    public static void main(String[] args) {
        // 创建猫类对象 并向上转型
        Animal cat = new Cat("小花猫","猫科动物",5);
         DuoTai(cat);
        // 创建狗类对象 并向上转型
        Animal dog = new Dog("二哈","犬科动物",2);
        DuoTai(dog);
    }
    // 由传入的参数对象 决定调用的子类方法 体现多态思想
    public static void DuoTai(Animal animal){
        animal.survival();
    }
}

运行结果:

  • 模板方法总结: 

解析:

1.由上述案例可以看出,模板模式的优势是,模板已经定义了通用架构,使用者只需要关心自己需要实现的功能即可!非常的强大!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值