zoukankan      html  css  js  c++  java
  • java 抽象类

    当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。

    但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。

    抽象方法的定义:通过abstract关键字来修饰的类称为抽象类;

    我的总结:

    抽象类用private修饰,里面可以有用private修饰的方法(没有方法体),强制子类进行覆写;

    可以理解为:具有某些公共方法的一个总结类。

    可以定义被abstract修饰的抽象方法

    抽象方法只有返回类型和方法签名,没有方法体。

     

    备注:

    抽象类可以含有普通方法

    抽象类不能创建实例对象(不能new

    需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类

    列举常见的几个抽象类:

    流的四个基本父类

    InputStream,OutputStream,Reader,Writer

    我的总结:

    抽象类是类的一种特殊情况:据有类的一切特点,但是不能实例化;一般的都得带有抽象方法。

    抽象类不可以实例化,有时看到的近似实例化是多态机制的体现,并不是真正的实例化。

    Eg:

    Socket s = new Socket();

    OutputStream os = s.getOutputStream();

    左边是OutputStream类型变量的声明,右边是获取抽象类OutputStream的一个实例对象!

    package testDemo2;

    abstract class Person{

    }

    class Student extends Person{

    }

    public class Demo2 {

        public static void main(String[] args) {

            Person p = new Student();//体现的是多态,父类声明实例化子类对象。而不是抽象类实例化

        }

    }

    abstract方法

    分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功能声明相同,但功能主体不同。

    那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

    abstract [非private访问修饰符] 返回值类型 方法名称(参数列表);

    抽象方法要存放在抽象类中。

    抽象方法也可以存在于接口中

    Eg:

    package reviewDemo;

    abstract class Person3{

        abstract void show();

        abstract void inof();

        void turn(){

        }

    }

    class NewP extends Person3{

        @Override

        void show() {

        }

        @Override

        void inof() {

        }

        //不覆写的话会报错

    }

    public class Demo15 {

        public static void main(String[] args) {

            //new Person3();报错!因为抽象类不可以实例化

        }

    }

  • 相关阅读:
    CHAR和HEX互相转换
    Delphi之TComponent类
    Delphi 延迟函数 比sleep 要好的多
    Delphi中三种延时方法及其定时精度分析
    Cport 应用集合
    重命名数据库时提示无法用排他锁锁定数据库
    Bugzilla在XP下安装
    Web service 超过了最大请求长度
    调用webservice时提示对操作的回复消息正文进行反序列化时出错
    c# IL 指令解析
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11131565.html
Copyright © 2011-2022 走看看