栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

抽象类和接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

抽象类和接口

文章目录
  • 抽象类
  • 接口
  • 抽象类和接口的相同点
  • 抽象类和接口的不同点

抽象类

一.抽象类的介绍

当父类的某些方法需要声明,但又不确定如何实现,可以将其声明为抽象方法,那么这个类就是抽象类。

范例:定义一个抽象类 讲语法

abstract class Animal{
    public abstract void eat();
}
class Cat extends Animal{


    @Override
    public void eat() {
       
    }
}

1)用abstract关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名{}
2)用abstract关键字来修饰一个方法时,这个方法就叫抽象方法
访问修饰符 abstract 返回类型 方法名(形参列表);//没有方法体

二.抽象类的注意事项

1.抽象类不能被实例化(举例)

public class Abstract {
    public static void main(String[] args) {
        new Animal();//'Animal' is abstract; cannot be instantiated
    }
}

abstract class Animal{
    public abstract void eat();
}

2.抽象类不一定包含abstract方法。就是说抽象类可以没有abstract方法
3.一但包含了抽象方法,则这个类必须声名为抽象类(举例)

class Animal{
    public abstract void eat();//Abstract method in non-abstract class

4.abstract 只能修饰类和方法 不能修饰属性和其它的
5.抽象类可以有任意成员(抽象类本质还是类),比如:静态成员 非静态成员 构造器 代码块等等

abstract class Animal{
    public abstract void eat();
    Animal(){
        
    }//构造器
    public void hi(){}//普通方法
    static{}//静态代码块
    int a;//属性
}

6.抽象方法不能有主体()
7.如果一个类继承了抽象类,则这个类必须实现即重写抽象类的所有方法,除非这个类也声明为抽象类(举例)

abstract class Animal{
    public abstract void eat();
    public abstract void sleep();
}
class Cat extends Animal{ //需要重写抽象类的所有抽象方法否则编译通不过


    @Override
    public void eat() {

    }
    @Override
    public void sleep() {
        
    }
}
abstract class Dog extends Animal{//声明为抽象类不用实现抽象类的抽象方法
    
}

8.抽象方法不能用private final static来修饰,因为这些关键字和重写相违背

接口

一.接口的介绍
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。总之,接口是为了规定一些东西才能发挥其价值的
语法:
interface 接口名{
//方法
//属性
}
注意:jdk8以前接口里只能有抽象方法 但jdk8开始后可以有抽象方法,静态方法,默认方法(也就是可以有方法的具体实现)

二.接口的注意事项
1.接口不能被实例化 类似于抽象类
2.接口中所有的方法是public方法,接口中抽象方法可以不用abstract修饰(举例)

interface A{
    
    void say(); //等价于public abstract void say()
}

3.一个普通类实现接口,就必须实现该接口的所有方法

interface A{
    void hi();
    void say(); //等价于public abstract void say()
}
class B implements A{
    @Override
    public void hi() {
        //实现接口的hi方法
    }

    @Override
    public void say() {
		//实现接口的say方法
    }
}

4.抽象类实现接口,可以不用实现该接口的方法(跟抽象类类似)
5.一个类同时可以实现多个接口(简单理解为是对java单继承机制的补充)

interface A{
    void hi();
    void say(); //等价于public abstract void say()
}
interface C{
    
}
class B implements A,C{//实现了接口A和C
    @Override
    public void hi() {

    }

    @Override
    public void say() {

    }
}

6.接口中的属性 是public final static的 比如 int a 实际上是 public static final int a = 1;
7.接口中属性的访问形式:接口名.属性名(因为是static 所以可以通过接口名访问 类似于访问静态属性一样)
8.接口不能继承类 但可以继承多个别的接口

interface D extends C,A{}

9.接口的修饰符 只能是public 和 默认 (这点和类一样)

抽象类和接口的相同点

1.都不能被实例化对象
2.都可以定义抽象方法

抽象类和接口的不同点
参数抽象类接口
关键字abstractinterface
属性访问修饰符public,protected,private等只能是public static final
抽象方法访问修饰符不能用private,static,final(与重写违背无法实现方法)只能是public
构造器有构造器无构造器
继承只能被普通类或抽象类继承可以多继承或单继承接口,可以被类实现
main方法抽象方法可以有main方法且可以运行jdk8以前没有main jak8后可以有main方法因为有默认方法和静态方法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号