【Java】抽象类和接口1

简介: 【Java】抽象类和接口

1.抽象类

1.1 抽象类的概念

class Animal {
    public String name;
    public void bark() {
        System.out.println(name+"叫");
    }
}
class Dog extends Animal {
    public void bark() {
        System.out.println(name+"汪汪汪");
    }
}
class Cat extends Animal {
    public void bark() {
        System.out.println(name+"喵喵喵");
    }
}

去.png



狗、猫都属于动物,所以狗类、猫类都需要继承动物类。那么动物类就是父类,狗类、猫类都是子类

在动物类中每一种动物的叫声都是不一样的,所以动物类中 bark 方法无法具体实现,需要在子类当中重写 bark 方法

那么我们就可以把 Animal 设置为抽象类

我们现在知道了抽象类使用的场景,那我们接下来就具体谈谈什么是抽象类:


我们知道在面向对象的世界里,一切皆为对象,对象是通过类来描述的。如果一个类中没有足够的信息来描绘一个具体的对象,那么这样的类就是抽象类


就像上述在动物类的例子中,我们可以发现,父类 Animal 中的 bark 方法好像没有什么实际工作,主要由 Animal 的各种子类的 bark 方法来完成。像这种没有什么实际工作的方法,我们可以将其设置为抽象方法,包含抽象方法的类我们就称为抽象类


1.2 抽象类的语法

在 Java 中,被 abstract 修饰的类就叫做抽象类


在抽象类中被 abstract 修饰的方法就叫做抽象方法,抽象方法不用给出具体的实现体


//被abstract修饰的类就叫做抽象类
abstract class Animal {
    public String name;
    Animal(String name) {
        this.name = name;
    }
    abstract public void bark();//被abstract修饰的方法就叫做抽象方法
}
class Dog extends Animal {
    Dog(String name) {
        super(name);
    }
    public void bark() {
        System.out.println(name+"汪汪汪");
    }
}

abstract 修饰的类就是抽象类

abstract 修饰的方法就是抽象方法

抽象类也是类,里面可以包含普通方法和属性,甚至构造方法

抽象方法没有实现体

抽象类的子类必须重写抽象类中的抽象方法 ,否则直接报错

抽象类的子类如果也是抽象类则不用重写抽象方法

1.3 抽象类的特性

abstract class Animal {
    public String name;
    abstract public void bark();
}
class Dog extends Animal {
    public void bark() {
        System.out.println(name+"汪汪汪");
    }
}
class Cat extends Animal {
    public void bark() {
        System.out.println(name+"喵喵喵");
    }
}

我们通过上述类的代码来谈谈抽象类的特性


①抽象类不能直接实例化

请.png



②抽象方法不能是 private 修饰(抽象方法如果没有加访问限定符时,默认是public)



其.png

③抽象方法不能被 final 和 static 修饰,因为抽象方法要被子类重写


前.png

却.png



④抽象类必须被继承,并且继承后子类要重写父类中的抽象方法(否则子类也是抽象类,必须要使用 abstract 修饰)


abstract class Animal {
    public String name;
    abstract public void bark();
}
class Dog extends Animal {
    public void bark() {
        System.out.println(name+"汪汪汪");
    }
}
abstract class Animal {
    public String name;
    abstract public void bark();
}
abstract class Dog extends Animal {
}

注:当有其他类继承 Dog 类,还是必须重写 Animal 类中的抽象方法


⑤抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类


⑥抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量


1.4 抽象类的作用

介绍完上述的抽象类后,想必大家此时都有这样一个疑问:抽象类可以实现的普通类也可以实现呀,抽象类可以被继承普通类也可以被继承,抽象类需要实现方法的重写,普通类也可以实现方法的重写,那究竟为什么需要抽象类呢?


那现在给大家举个例子,想必大家也就明白了为什么需要抽象类了


比如:上述我们讲的动物类,每个动物都会叫,但是不同的动物叫声都不一样。那么在 Animal 动物类中就无法具体实现 bark 方法 ,我们就可以将 bark 方法设置为抽象方法,那么 Animal 类也就需要设置为抽象类。我们上述讲抽象类的特性时也就强调过普通类继承抽象类一定要重写抽象类中的抽象方法,如果不重写抽象类中的抽象方法就会直接报错。那么普通类必须重写抽象类中的抽象方法这就起到一种校验的作用,这样也就避免了用户忘记重写抽象方法而导致出错


2.接口

2.1 接口的概念  

说到接口,大家可以想到什么呢?


比如生活中常见的插座的插孔,电脑上常有的USB接口等等。这些都属于接口


插座插孔可以接所有符合规范的设备,电脑的USB接口可以接所有符合USB协议的设备


接口的概念:接口就是公共的行为规范标准,用户在实现时,只要符合规范标准,就可以通用


在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型


2.2 接口的语法规则

interface 修饰的就是接口

我.png



建议:


在创建接口时,接口的命名一般以大写字母 I 开头

接口的命名一般使用 "形容词" 词性的单词

接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性

为.png


interface 修饰的是接口

接口中定义的变量不加 public static final 默认也是 public static final 修饰,建议不要加保持代码的简洁性

接口中的抽象方法不加 public abstract 默认也是 public abstract  修饰,建议不要加保持代码的简洁性

jdk1.8 开始,允许在接口中可以实现方法,但必须有 default 修饰

接口当中可以实现静态方法  


相关文章
|
4月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
372 2
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
169 11
|
2月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
234 0
|
4月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
306 23
|
4月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
283 12
|
4月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
4月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
1541 0
|
5月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
218 0