Java(11)面向对象之多态,抽象类与接口,lambda表达式,预置函数式接口

本文介绍了Java中的多态性概念,强调了其在消除类型耦合、增强可替换性和可扩充性等方面的重要性。讲解了多态的三个必要条件:继承、重写和父类引用子类对象。接着,文章探讨了抽象类与子类的关系,以及抽象类不能被实例化的特性。此外,还详细阐述了接口的使用,包括多继承、实现类的处理以及default和static修饰的方法。最后,文章提到了函数式接口、lambda表达式以及预置函数式接口,并讨论了可能出现的方法冲突问题。
摘要由CSDN通过智能技术生成

01 什么是多态

多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示
在这里插入图片描述
多态性是对象多种表现形式的体现。
现实中中,说人喜欢娱乐

  • 电子产品
  • 电子竞技
  • 追剧
  • 运动

多态优点

  • 消除类型之间的耦合关系

  • 可替换性

  • 可扩充性

  • 接口性

  • 灵活性

  • 简化性

多态存在的三个必要条件

  1. 继承
  2. 重写
  3. 父类引用指向子类对象

多态的实现方式
方式一:重写与重载,Java 重写(Override)与重载(Overload)。
方式二:抽象类和抽象方法
方式三:接口,就是一些方法特征的集合,但没有方法的实现
生活中的接口:
在这里插入图片描述

  • 在接口中的方法为抽象方法 不允许出现方法体
  • 从java8开始允许接口中的方法有方法体 但必须使用default或修饰
  • 在接口中 static 修饰的方法
  • 只能使用接口名点方法名的方式调用不能使用实现类的实例化对象调用
  • 不可以被子接口继承
  • 在接口中 default 修饰的方法
  • 只能使用实现类的实例化对象调用
  • 可以子接口继承
  • 可以被子接口重写
  • 可以被实现类重写
package polymorphic01;

public class Animal {
   
    public void eat(){
   
        System.out.println("不吃不喝你是要升仙吗");
    }

    public static class Cat extends Animal{
   
        @Override
        public void eat() {
   
            System.out.println("吃猫粮");
        }
    }

    public static class Dog extends Animal{
   
        @Override
        public void eat() {
   
            System.out.println("吃狗粮");
        }
    }
}
package Test.polymorphic01;

import polymorphic01.Animal;
import org.junit.jupiter.api.Test;

public class AnimalTest {
   
    @Test
    public void test(){
   
        Animal cat = new Animal.Cat();
        Animal dog = new Animal.Dog();
        cat.eat();
        dog.eat();
    }
    /*
吃猫粮
吃狗粮
    */
}

02 抽象类与子类

package polymorphic02;

/**
 * 抽象方法 使用abstract修饰且没有方法体的方法我们称之为抽象方法
 * 使用abstract修饰的类我们称之为抽象类
 * 注意 具有抽象方法的类一定是抽象类但抽象类类不一定有抽象方法
 * 子类继承父类 要么子类必须重写父类中的抽象方法 要么子类也是抽象类
 * 抽象类不能被实例
 */
public abstract class Animal {
   
    public abstract void eat();
    
    public static class Cat extends Animal{
   
        @Override
        public void eat() {
   
            System.out.println("吃猫粮");
        }
    }
    
    public static class Dog extends Animal{
   
        @Override
        public void eat() {
   
            System.out.println("吃狗粮");
        }
    }
    
    public abstract static class Person extends Animal{
   
    }
}

03 抽象类不能被实例化

package polymorphic03;

/**
 * 抽象方法 使用abstract修饰且没有方法体的方法我们称之为抽象方法
 * 使用abstract修饰的类我们称之为抽象类
 * 注意 具有抽象方法的类一定是抽象类但抽象类类不一定有抽象方法
 * 子类继承父类 要么子类必须重写父类中的抽象方法 要么子类也是抽象类
 */
public abstract class Animal {
   
    public abstract void eat();
    
    public static class Cat extends Animal {
   
        @Override
        public void eat() {
   
            System.out.println("吃猫粮");
        }
    }
    
    public static class Dog extends Animal {
   
        @Override
        public void eat() {
   
            System.out.println("吃狗粮");
        }
    }
}
package Test.polymorphic03;

import Day14.polymorphic03.Animal;
import org.junit.jupiter.api.Test;

public class AnimalTest {
   
    @Test
    public void test01(){
   
        Animal cat = new Animal.Cat();
        Animal dog = new Animal.Dog();
        cat.eat();
        dog.eat();
    }
/*
吃猫粮
吃狗粮
*/
    @Test
    public void test(){
   
        new Animal() {
   
            @Override
            public void eat() {
   
                System.out.println("不吃不喝,你是要升仙吗");
            }
        }.eat();
    }
    //不吃不喝,你是要升仙吗
}

04 多态之接口

package polymorphic04;

public interface InterFace01 {
   
    void if01Fun();
    
    interface InterFace02 {
   
        void if02Fun();
    }
    
    interface InterFace03 extends InterFace01, InterFace02 {
   
        void if03Fun();
    }
}

05 接口多继承与实现类

package polymorphic05;

public interface InterFace01 {
   
    void if01Fun();
    
    interface InterFace02 {
   
        void if02Fun();
    }
    
    interface InterFace03 extends InterFace01, InterFace02 {
   
        void if03Fun()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值