Java中抽象类和接口介绍

目录
  • 1、抽象类
    • 1.1 什么是抽象类?
    • 1.2 抽象类属于什么类型?
    • 1.3 抽象类怎么定义?
    • 1.4 抽象方法
  • 2、接口
    • 2.1 关于接口
    • 2.2 接口怎么定义?
    • 2.3 接口基础语法
  • 总结

1、抽象类

1.1 什么是抽象类?

1.1.1 对抽象类的理解

1.1.2 关于抽象类

类与类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类;

类本身是不存在的,属于抽象类无法创建对象【无法实例化】;

抽象类是用来被子类继承的

finial关键字和abstract关键字不能同时出现;

抽象类的子类可以是抽象类;

抽象类虽然无法实例化,但有构造方法,这个构造方法是供子类使用的;

接口一般描述的是行为动作信息

一个非抽象的类继承抽象类,必须把抽象类中的抽象方法给实现(覆盖、重写)了

public class HelloWorld{
    public static void main(String[] args){
        //如何实现多态呢???
        Animal a = new Bird();//向上转型(自动类型转换)
        //面对抽象对象编程,降低程序的耦合度,提供程序的扩展力,符合OCP原则
    }
}
abstract class Animal{
    public abstract void move();
}
class Bird extends Animal{
    public void move(){
    }//Bird不是抽象类,必须实现父类的抽象方法
}//如果Bird是抽象类的话,那么继承过来的抽象方法可以不去重写、覆盖、实现

1.2 抽象类属于什么类型?

抽象类也属于引用数据类型;

1.3 抽象类怎么定义?

[修饰符列表] abstract class 类名{

类体;

}

1.4 抽象方法

1)抽象方法表示没有实现的方法,没有方法体以分号结尾的方法。例如:

public abstract void doSome();

2)抽象类中不一定有抽象方法,但抽象方法一定在抽象类当中;

3)没有方法体的方法不一定都是抽象方法,Object类中就有很多方法都没有方法体,以" ;"结尾 e.g.:public native int hashCode();这个方法底层调用了C++写的动态链接库程序;前面修饰符列表中有native,表示调用JVM本地程序

2、接口

2.1 关于接口

1)接口也是一直引用数据类型,

2)接口的完全抽象的(抽象类是半抽象类)或者也可以说接口是特殊的抽象类

3)接口支持接口继承也支持接口多继承

interface A{
}
interface B{
}
interface C extends A,B{
}

4)接口中只包含两部分内容,一部分是常量,另一部分是抽象方法,所有内容都是public修饰的,都是公开的;

5)接口中抽象方法中的public static 可以省略,"public abstract int sun(int a,int b);" ——> "int sun(int a,int b);"

6)接口中变量中的public static final 可以省略,"public static final double PI = 3.1415926;" —> "double PI = 3.1415926;;"

7)接口中的方法都是抽象方法,所以接口中的方法都没有方法体

2.2 接口怎么定义?

[修饰符列表] interface 接口名{

}

2.3 接口基础语法

1)类和类之间叫做继承,类和接口之间叫做实现(可看作继承),用关键字"implements";

2)当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖、重写);

public class interface {
    public static void main(String[] args) {
        //如何实现多态???
        //父类型的引用指向子类型的对象
        MyMath m = new MyMathImp();
        //调用接口里面的方法(面向接口编程)
        int result = m.sum(10,2);
        System.out.println(result);
    }
}
interface MyMath{
    double PI = 3.1415926;
    int sum(int a,int b);
    int sub(int a,int b);
}
class MyMathImp implements MyMath{
    public int sum(int a,int b){//重写接口中的抽象方法
        return a + b;
    }
    public int sub(int a,int b){//重写接口中的抽象方法
        return a - b;
    }
}

注意:非抽象的类实现接口时重写的抽象方法public不可省;

3)一个类可以实现多个接口,这种机制弥补了"java中类和类只支持单继承"带来的缺陷;

接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转,但运行的时候可能会出现ClassCastException异常,需要加instanceof进行判断;

public class HelloWorld{
    public static void main(String[] args) {
        //如何实现多态???
        A a = new C();
        if(a instanceof B){
            B b2 = (B)a;//此时a b的底层都是C,C实现了接口A和接口B,所以可以向下转型
            b2.m2();
        }

        M m = new E();
        if(m instanceof K){
            K k = (K)m;//这里的E()和K没有关系,E实现了M,但没有实现接口K,所以不能向下转型
            k.m3();
        }
    }
}
interface A{
    void m1();
}
interface B{
    void m2();
}
class C implements A,B{//C实现了A和B
    public void m1(){
​
    }
    public void m2(){
        System.out.println("可以向下转型!");
    }
}
​
interface K{
    void m3();
}
interface M{
    void m4();
}
class E implements M{//E实习了M,但没有实现K
    public void m3(){
    }
    public void m4(){
    }
​

4)继承和实现都存在的话,代码怎么写?

extends关键字在前,implements关键字在后

public class interface{
    public static void main(String args[]){
        //创建对象
        Flyable f = new Cat();
        f.fly();
    }
}
//动物类:父类
class Animal{
}
//可飞翔的接口(是一对翅膀)
//能插拔的就是接口。
//接口提取的是行为动作
interface Flyable{
    void fly();
}
//动物类子类:猫
//Flyable是一个接口,是一个翅膀的接口,通过接口插到猫身上,让猫可以飞翔
class Cat extends Animal implements Flyable{
    public void fly(){
        System.out.println("猫会飞");
    }
}

总结

到此这篇关于Java中抽象类和接口介绍的文章就介绍到这了,更多相关Java抽象类和接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中的对象、类、抽象类、接口、继承之间的联系

    正文: 举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成. 在动物中又分为两类:哺乳动物.卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示. 而哺乳动物可以继续划分为人.狗.猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示. 如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式. 然后每个学生或者每个工人都是具体的,那么就通过对象来表示: 由下

  • 浅析Java中接口和抽象类的七大区别

    目录 接口 抽象类 区别1:定义关键字不同 区别2:继承或实现的关键字不同 区别3:子类扩展的数量不同 区别4:属性访问控制符不同 区别5:方法控制符不同 区别6:方法实现不同 区别7:静态代码块使用不同 总结 Java 是一门面向对象的编程语言,面向对象的编程语言有四大特征:抽象.封装.继承和多态. 而本文介绍的接口和抽象类就是面向对象编程中"抽象"的具体实现,也就是说接口和抽象类都是用来定义实体类的公共行为的,它们是对实体类(对象)更高层次的抽象. ​说明:本文以下内容基于 JDK

  • Java中比较抽象类与接口的异同

    目录 一.抽象类 (一)概念 (二)抽象类和抽象方法 (三)使用抽象类的意义 二.接口 (一)概念 (二)语法 三.比较抽象类与接口 Q: 为什么有了抽象类还要接口?  Q: 如何确定在什么情况下应该使用接口,什么情况下应该使用类呢? 一.抽象类 (一)概念       在继承的层次结构中,每个新的子类都使类变得更加明确和具体.如果从一个子类向父类追溯,类就会变得更通用.更加不明确.类的设计应该确保父类包含它的子类的共同特征.有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例.这样的类

  • Java 接口和抽象类的区别详解

    什么是抽象类和接口? 区别在哪里? 不同的编程语言对接口和抽象类的定义方式可能有些差别,但是差别并不大.本文使用 Java 语言. 抽象类 下面我们通过一个例子来看一个典型的抽象类的使用场景. Logger 是一个记录日志的抽象类,FileLogger 和 MessageQueueLogger 继承Logger,分别实现两种不同的日志记录方式: 记录日志到文件中 记录日志到消息队列中 FileLogger 和 MessageQueuLogger 两个子类复用了父类 Logger 中的name.e

  • 深入浅析Java 抽象类和接口

    目录 一.抽象类 1.抽象类 1.1抽象类的定义 1.2抽象方法的定义方式 1.3抽象类的定义方式 2.抽象类和实例类的区别 3.抽象类示例 4.抽象类的特征 二.接口 1.接口 1.1接口的定义 1.1定义一个接口 1.2 接口的使用 1.3接口的注意事项 2.接口示例 3.接口的特征 三.抽象类和接口的区别 一.抽象类 1.抽象类 1.1抽象类的定义 在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对

  • Java中抽象类和接口介绍

    目录 1.抽象类 1.1 什么是抽象类? 1.2 抽象类属于什么类型? 1.3 抽象类怎么定义? 1.4 抽象方法 2.接口 2.1 关于接口 2.2 接口怎么定义? 2.3 接口基础语法 总结 1.抽象类 1.1 什么是抽象类? 1.1.1 对抽象类的理解 1.1.2 关于抽象类 类与类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类: 类本身是不存在的,属于抽象类无法创建对象[无法实例化]: 抽象类是用来被子类继承的: finial关键字和abstract关键字不能同时出现: 抽象

  • java中抽象类和接口的相同和不同点介绍

    目录 前言 一.抽象类是什么? 二.接口是什么? 三.抽象类和接口的异同点 总结 前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例. 一.抽象类是什么? 在 Java 语言中使用 abstract class 来定义抽象类.抽象类是不能被实例化的,即不能用new关键字来实例化对象.包含抽象方法的一定是抽象类,但抽象类不一定包含抽象方法.如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类.抽象类中的抽象方法的修饰符只能为public或者pr

  • Java中抽象类和接口的区别_动力节点Java学院整理

    接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类. 抽象类 1 如果将一个类

  • 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解.对于设计意图的理解是否正确.合理

  • PHP中抽象类,接口功能、定义方法示例

    本文实例讲述了PHP中抽象类,接口功能.定义方法.分享给大家供大家参考,具体如下: 这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看文字一样.栗子举的不好. 代码测试环境:php5.3.29 接口(interface): 接口就是为抽象而生的,相当于一个约定或规范,方便框架搭建,代码分工. 它里面指定了抽象方法的名称和参数和成员常量,但不能包含任

  • Java多态性抽象类与接口细致详解

    目录 1.多态性 1.1 向上转型 1.2 向下转型 2.抽象类 2.1 抽象类的基本概念 3.接口 3.1 接口的基本概念 3.2 接口的使用限制 3.3 使用接口定义标准 3.4 抽象类与接口的区别 1.多态性 多态性是面向对象的最后一个特征,它本身主要分为两个方面: ​ 方法的多态性:重载与覆写 ​ 1 重载:同一个方法名称,根据参数类型以及个数完成不同功能: ​ 2 覆写:通一个方法,根据操作的子类不同,所完成的功能也不同. ​ 对象的多态性:父子类对象的转换. ​ 1 向上转型:子类对

  • 详解JavaSE中抽象类与接口的定义及使用

    目录 一.抽象类 1.抽象类定义 2.抽象方法 二.接口 1.接口定义 2.类实现接口 3.接口与多态联合 4.extends和implements 5.接口在开发当中的作用 6.is has like 7.抽象类与接口 一.抽象类 1.抽象类定义 1.什么是抽象类? 类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类. 类到对象是实例化,对象到类是抽象. 抽象类无法实例化,无法创建对象.抽象类是类和类之间有共同特征,将这些具有共同特征的类再进一步抽象,就形成了抽象类.由于类本身是

  • PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型) <?php abstract class Father { funct

  • Java中ArrayList类详细介绍

    Java中ArrayList类详细介绍 ArrayList是一个可变长度数组,它实现了List接口,因此它也可以包含重复元素和Null元素,也可以任意的访问和修改元素,随着向 ArrayList 中不断添加元素,其容量也自动增长.不过ArrayList是非同步(同步的意思是如果多个线程同时访问一个实例,任何一个线程对实例做了修改之后,其他线程所访问到的实例应该是修改过的最新的实例)的, 我们经常使用List list = Collections.synchronizedList(new Arra

  • 详解JAVA中的Collection接口和其主要实现的类

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set,详细信息可见官方文档http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/

随机推荐