Java抽象类的总结

什么是抽象类:

  当你在定义一个父级的类的时候,往往在父级内的方法没有添加任何内容,这时候如果你在子类里面调用父级的时候,万一在子类之中类名或者方法名没有写正确,会出现不执行的情况,但是这种情况默认是不报错的,此时如果将父级定义为抽象类的时候,子类必须有父类的内容,即写错名称会报错,这时候就体现抽象类的作用了。

  总结两句话来说就是:

  1.父类和子类中,父类的方法有很多情况下是没有内容的。

  2.如果子类重写的时候写错,正常方法不会报错。

抽象类:

用abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象。

抽象方法:

用abstract关键字修饰的方法叫做抽象方法,抽象方法必须定义在抽象类中。

抽象方法有声明,写法为后面不跟花括号,因为抽象方法不知道是给谁定义,所以可以不写函数体。

public abstract class YunSuan {
    protected int a;
    protected int b;

    public abstract void QiuZhi();
}

抽象类和抽象方法的关系:

  抽象方法必须定义在抽象类里面。

  如果一个类包含了抽象方法,那么这个类一定要声明成抽象类。

  如果某个类是抽象类,那么这个类既可以包含抽象方法,也可以包含具体的方法(有声明,有实现)。

  抽象类中如果全是具体方法也是允许的;抽象类也可以是空的,即什么也不包含。

抽象类的继承:

  当父类为抽象类的时候,子类继承父类,会出现两种情况,子类是抽象类,子类不是抽象类:

  子类是抽象类的时候:

  子类必须还要在class上定义一个abstract的关键字,子类可以选择实现或者不实现父类的抽象方法,因为抽象类中可以包含抽象方法和具体方法,所以子类中也可以全部写为具体方法,或者写为全部的抽象方法,亦或者抽象方法和具体方法都有。

  子类不是抽象类的时候:

  子类不是抽象类的时候,这时候子类就要全部实例化,也就是要把父类的抽象方法全部实现。这时候子类就不必使用abstract关键字了。

抽象类的具体用途:

  抽象类的抽象方法定义一个规范,或者叫做约定,具体实现交给子类来做。

  因为抽象类的实现可能无法完成或者没有意义。

例:

public abstract class USB {
    public abstract void QiDong();
    public abstract void TingZhi();
}

先定义一个USB的抽象方法作为父类。

public class UPan extends USB {
    public void QiDong(){
        System.out.println("U盘启动了");
    }
    public void TingZhi(){
        System.out.println("U盘停止了");
    }
}

再定义一个UPan作为实例化子类,将父类的内容全部实例化。

public abstract  class JianPan extends USB {

    public void QiDong() {
        // TODO 自动生成的方法存根
        System.out.println("键盘启动了");;
    }

}

再定义一个JianPan作为抽象化子类,只实现父类里面的QiDong。

public class LuoJiJianPan extends JianPan {

    public void QiDong(){
        System.out.println("罗技键盘启动");
    }
    @Override
    public void TingZhi() {
        // TODO 自动生成的方法存根
        System.out.println("罗技键盘停止了");;
    }

}

最后定义一个LuoJiJianPan作为JianPan的子类,将JianPan继承下来的USB中未实例化的TingZhi实例化,再将JianPan中的QiDong重写。

public class DianNao {
    public void USBChaRu(USB usb){
        usb.QiDong();
    }
    public void USBBaChu(USB usb){
        usb.TingZhi();
    }
}
public static void main(String[] args) {
        DianNao d = new DianNao();

        LuoJiJianPan pan = new LuoJiJianPan();

        d.USBChaRu(pan);     d.USBBaChu(pan);

    }

输出一下的结果为:

罗技键盘启动
罗技键盘停止了
时间: 2024-10-13 16:11:14

Java抽象类的总结的相关文章

java抽象类和接口

1.抽象类 抽象类在概念上描述的是抽象世界,抽象类刻画了公有行为的特征,并且通过继承机制传送给它的派生类.抽象类使用关键字abstract 修饰,语法如下: abstract class 类名{ 类体; } 抽象方法是指在抽象类中某些成员方法没有具体的实现,只有方法声明.抽象方法使用关键字abstract 修饰,格式如下: public abstract 返回类型 方法名([参数列表]); 抽象类和抽象方法的具体规则如下: 1.用abstract 关键字修饰一个类时,该类叫做抽象类,用abstr

JAVA学习经验--总结JAVA抽象类和接口

* --总结JAVA抽象类和接口  * 1.抽象类:  *             1>抽象类可以修饰方法,修饰类,但不能修饰属性,不能被实例化  *             2>抽象类可以被继承,只能是单继承,继承抽象类必须实现抽象方法  *             3>抽象类不能被static ,fina,private一起修饰  *             4>抽象类是有多态性的  *  * 2.接口:  *             1>接口是一种特殊的抽象类,不能被实

java抽象类和接口的区别(转载)

1.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用. 如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点. 2.一个抽象类的实现只能由这个抽象类的子类给出,也就是

浅析Java抽象类和接口的比较

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

JAVA抽象类和接口的深入探讨

Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. 本文将从下面几个方面深入探讨一下Java 抽象类和接口 一.抽象类语法及规范 二.接口的语法及规范 三.抽象类和接口的区别 ,将从语义细节及设计层面两方面来描述 本文由本人查阅资料并结合自己理解所作,如果有理解不到位的地方,欢迎各位斧正. 一.抽象类 抽象类使用 abstract class 来定

Java抽象类/抽象方法

java抽象类的特点: *抽象类无法被实例化 *子类继承抽象类然后实例化子类 *子类继承了抽象类剋必须实现抽象类的中的抽象方法 *抽象类的定义 abstract class *** *抽象方法的定义:public abstract void ***():ps:抽象方法不能有方法体 --------------------------------------------------------------------------- 下面我们来代码实现下: 先创建一个.java文件 然后我们定义个抽

Java 抽象类 抽象方法 接口

#抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法. 在Java中抽象

【Medium翻译】Java抽象类有什么用?

今天安利一个网站,其实很多朋友应该早就知道了,我之前ARTS打卡,英文文档的 很多出处就来自于这个网站,叫 「Medium」. 这个网站需要一定的技术去访问,但是为什么说他好呢,因为他号称全球最大的高质量创作型内容平台.很多知识小编都是在这里学习到的,也了解到国外程序员的一些习惯,其实和我们国内的也差不多,但是通过英文说出来,感觉还真有那么点不一样吧. 小编不才,今天尝试下翻译这里的好文,期待和你的交流. 标题:「Java Abstract Class What Is It Good For?」

java抽象类及接口

Java抽象类: 抽象类特点:抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被extends [抽象类]方式 继承才能被使用. 抽象类表示的是一种继承关系. (总结就是:抽象类里面设计跟普通类一样,但就是不能用来实例化对象,所以需要被继承类 extends [抽象类] 继承来使用) 创建方式: public abstract class a{ ......可以是有变量方法还有构造方法等等.....

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletC