Java多态---接口

文章讲述了Java编程中的多态概念,包括Dog和Cat类对eat方法的重写,以及Person类如何根据不同的宠物类型调用相应的行为。同时,介绍了包的管理、权限修饰符的使用规则、final关键字的应用、常量的命名规范以及静态代码块的使用场景。此外,还讨论了抽象类和抽象方法的定义,以及接口的实现方式和特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

//dog
  public void lookHome(){
        System.out.println("狗看家!");
    }

    @Override
  public void eat(String something) {
        System.out.println(getAge()+"岁的"+getColor()+"颜色的狗俩只前腿死死的抱住"+something+"猛吃");
    }
//cat
    public void catchMouse(){
        System.out.println("逮老鼠!");
    }

    @Override
    public void eat(String something) {
        System.out.println(getAge()+"岁的"+getColor()+"颜色的猫咪眯着眼睛侧着头吃"+something);
    }
//person    
public void keepPet(Animal animal,String something){
        if(animal instanceof Dog dog){
            System.out.println("年龄为"+this.age+"岁的"+this.name+"养了一只"+dog.getColor()+"颜色的"+dog.getAge()+"岁的狗");
            dog.eat(something);
        }else if(animal instanceof Cat cat){
            System.out.println("年龄为"+this.age+"岁的"+this.name+"养了一只"+cat.getColor()+"颜色的"+cat.getAge()+"岁的猫");
            cat.eat(something);
        }else{
            System.out.println("没有这种动物!");
        }
    }
//test
    public static void main(String[] args) {
//        老王
        Person laowang = new Person("老王", 30);
//        老李
        Person laoli = new Person("老李", 25);
//        黑色的2岁的狗
        Animal dog = new Dog(2, "黑");
//        灰色的3岁的猫
        Animal cat = new Cat(3, "灰");

        laowang.keepPet(dog, "骨头");
        laoli.keepPet(cat, "鱼干");
    }

1、包就是文件夹,用来管理各种不同功能的Java类,方便后期代码维护

2、包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意。com.itheima.domain

3、全类名指的是,例:com.itheima.domain.Student

4、使用其他类的规则:

  • 使用同一个包中的类时,不需要导包
  • 使用Java.lang包中的类时,不需要导包
  • 其他情况都需要导包
  • 如果同时使用俩个包中的同名类,需要用全类名

final

  1. 方法:表明该方法是最终方法,不能被重写
  2. 类:表明该类是最终类,不能被继承
  3. 变量:表明这是一个常量,只能被赋值一次

常量

1、常量一般为系统的配置信息,方便维护,提高可读性

2、命名规范:

  • 单个单词:全部大写
  • 多个单词:全部大写,单词之间用下划线隔开

3、final修饰的变量是基本类型,那么变量存储的数据值不能发生改变

4、final修饰的变量是引用类型,那么变量存储的地址值不能发生改变,对象内部的可以改变

权限修饰符

修饰符同一个类同一个包中其他类不同包下的子类不同包下的无关类
private
默认
protected
public

使用规则

实际开发中,一般只用private和public

  • 成员变量私有
  • 方法公开

特例:如果方法中的代码时抽取其他方法中共性代码,这个方法一般也私有

代码块

  • 局部代码块
  • 构造代码块
  • 静态代码块

静态代码块

格式:static{}

特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次

使用场景:在类加载的时候,做一些数据初始化的时候使用

static ArrayList<User> list =new ArrayList<>();
static {
    list.add(new User(......));
}
//只会执行一次

抽象方法

  • 抽象方法:将共性的行为(方法)抽取到父类之后。由于每一个子类执行的内容是不一样的,所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法
  • 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类

抽象类和抽象方法的定义格式

  • 抽象方法的定义格式

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

  • 抽象类的定义格式:

      public abstract class 类名 {}
    

抽象类和抽象方法的注意事项

  • 抽象类不能实例化
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 可以有构造方法
  • 抽象类的子类
    • 要么重写抽象类中所有抽象方法
    • 要么是抽象类

接口的定义和使用

  • 接口用关键字interface来定义

​ public interface 接口名 {}

  • 接口不能是实例化

  • 接口和类之间是实现关系,通过implements关键字表示

    ​ public class 类名 implements 接口名 {}

  • 接口的子类(实现类)

    ​ 要么重写接口中的所有抽象方法

    ​ 要么是抽象类

注意1:接口和类的实现关系,可以单实现,也可以多实现

​ public class 类名 Implements 接口名1,接口名2 {}

注意2:实现类还可以在继承一个类的同时实现多个接口

​ public class 类名 extends 父类 implements 接口名1,接口名2 {}

接口中成员的特点

  • 成员变量
    • 只能是常量
    • 默认修饰符:public static final
  • 构造方法
    • 没有
  • 成员方法
    • 只能是抽象方法
    • 默认修饰符:public abstract

1、导入模块

选中iml文件导入

2、小写字母变大写

ctrl+shift+u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值