精华内容
下载资源
问答
  • 抽象类没抽象方法的例子

    千次阅读 2014-04-30 17:17:38
    都知道抽象类可以没有抽象方法,...最近看了jdk的I/O包后,发现里面有个很好的例子,就是FilterReader类.以下是FilterReader的代码: public abstract class FilterReader extends Reader {  /**  * The 

     都知道抽象类可以没有抽象方法,这时的抽象类和普通类的最大差别就是不能实例化.一直没找到在什么环境下用到这种特殊的抽象类.最近看了jdk的I/O包后,发现里面有个很好的例子,就是FilterReader类.以下是FilterReader的代码:

    public   abstract   class  FilterReader  extends  Reader  {

        
    /**
         * The underlying character-input stream.
         
    */

        
    protected Reader in;

        
    /**
         * Create a new filtered reader.
         *
         * 
    @param in  a Reader object providing the underlying stream.
         * 
    @throws NullPointerException if <code>in</code> is <code>null</code>
         
    */

        
    protected FilterReader(Reader in) {
        
    super(in);
        
    this.in = in;
        }


        
    /**
         * Read a single character.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public int read() throws IOException {
        
    return in.read();
        }


        
    /**
         * Read characters into a portion of an array.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public int read(char cbuf[], int off, int len) throws IOException {
        
    return in.read(cbuf, off, len);
        }


        
    /**
         * Skip characters.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public long skip(long n) throws IOException {
        
    return in.skip(n);
        }


        
    /**
         * Tell whether this stream is ready to be read.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public boolean ready() throws IOException {
        
    return in.ready();
        }


        
    /**
         * Tell whether this stream supports the mark() operation.
         
    */

        
    public boolean markSupported() {
        
    return in.markSupported();
        }


        
    /**
         * Mark the present position in the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void mark(int readAheadLimit) throws IOException {
        in.mark(readAheadLimit);
        }


        
    /**
         * Reset the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void reset() throws IOException {
        in.reset();
        }


        
    /**
         * Close the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void close() throws IOException {
        in.close();
        }


    }

    可以看到FilterReader就是一个没有抽象方法的抽象类,里面的每个方法都是调用构造函数传入的Reader对象的方法.这种抽象类你不能实例化它,因为实例化它没意义,它还没实现任何Filter的功能.在extends具体子类时实现Filter功能,实例化相应的子类才有实际意义.

    我们可以写FilterReader的一个具体子类如下:

    /**
     * FilterReader是一个抽象类,不能实例化该类,FilterReader类的每个方法都是实现的,
     * 里面调用的都是FilterReader(Reader in)的传入参数in的方法.    
     
    */

    public   class  UppercaseConvertor  extends  FilterReader {
        
    // 构造方法由FilterReader的protected上升到public的
        public UppercaseConvertor(Reader in) {
            
    super(in);
        }

        
        @Override
        
    public int read() throws IOException{
            
    int c = super.read();
            
    return (-1==c?c:Character.toUpperCase((char)c));
        }

        
        @Override
        
    public int read(char[] buf,int offset, int count) throws IOException{
            
    int nread = super.read(buf, offset, count);
            
    int last = offset + nread;
            
    for(int i=0;i<last;i++)
                buf[i] 
    = Character.toUpperCase(buf[i]);
            
    return nread;
        }


        
    public static void main(String[] args) throws IOException {
            UppercaseConvertor uc 
    = new UppercaseConvertor(new FileReader("d:\log.txt"));
            BufferedReader br 
    = new BufferedReader(uc);
            String r;
            
    while(null!=(r=br.readLine())){
                System.out.println(r);
            }

        }

    }

     

    展开全文
  • Java 抽象类经典例子2

    千次阅读 2016-10-18 10:24:47
    Java 抽象类经典例子2目录Java 抽象类经典例子2目录 问题描述 代码块 答案问题描述抽象类的练习 学生案例: 具体类:一般学生 优秀学生 共性:姓名 年龄 年纪 吃饭 差异: 学习内容代码块代码块语法遵循...

    Java 抽象类经典例子2

    目录

    问题描述

    抽象类的练习
    学生案例:
    具体类:一般学生 优秀学生
    共性:姓名 年龄 年纪
    吃饭
    差异: 学习内容

    代码块

    代码块语法遵循标准markdown代码,例如:

    abstract class student {
        //成员变量
        private String name;
        private int age;
        private int grand;
        //无参构造方法
        public student(){}
        //带参构造方法
        public student(String name,int age,int grand){
            this.name=name;
            this.age=age;
            this.grand=grand;
        }
    
        public void setname(String name){
            this.name=name;
        }
        public String getname(){
            return name;
        }
        public void setage(int age){
            this.age=age;
        }
        public int getage(){
            return age;
        }
        public void setgrand(int grand){
            this.grand=grand;
        }
        public int getgrand(){
            return grand;
        }   
        //抽象方法
        abstract public void study();
        //成员方法
        public void eat(){
            System.out.println("该吃饭了:");
        }
    }
    class Basicstudent extends student {
        //构造方法
        public Basicstudent(){}
        public Basicstudent(String name,int age,int grand){
            super(name,age,grand);
        }
        public void study(){
            System.out.println("Basicstudent:   study");
        }
    
    }
    class Goodstudent extends student{
    
        public Goodstudent(){}
        public Goodstudent(String name,int age,int grand){
            super(name,age,grand);
        }
    
        public void study(){
            System.out.println("Goodstudent:  study");
        }
    }
    public class AbstractTest3{
        public static void main(String[] args){
            student s =new Basicstudent();
            s.setname("Basicstudent1");
            s.setage(20);
            s.setgrand(1111);
            System.out.println(s.getname()+"----"+s.getage()+"----"+s.getgrand());
            s.eat();
            s.study();
    
            s =new Basicstudent("Basicstudent1",20,2222);
            System.out.println(s.getname()+"----"+s.getage()+"----"+s.getgrand());
            s.eat();
            s.study();
        }
    }

    答案

    Basicstudent1—-20—-1111
    该吃饭了:
    Basicstudent: study
    Basicstudent1—-20—-2222
    该吃饭了:
    Basicstudent: study

    展开全文
  • 抽象类里没抽象方法的例子

    千次阅读 2007-08-30 22:15:00
    都知道抽象类可以没有抽象方法,这时的...最近看了jdk的I/O包后,发现里面有个很好的例子,就是FilterReader类.以下是FilterReader的代码: public abstract class FilterReader extends Reader ...{ /** *//** 

     都知道抽象类可以没有抽象方法,这时的抽象类和普通类的最大差别就是不能实例化.一直没找到在什么环境下用到这种特殊的抽象类.最近看了jdk的I/O包后,发现里面有个很好的例子,就是FilterReader类.以下是FilterReader的代码:

     

    public   abstract   class  FilterReader  extends  Reader  {

        
    /**
         * The underlying character-input stream.
         
    */

        
    protected Reader in;

        
    /**
         * Create a new filtered reader.
         *
         * 
    @param in  a Reader object providing the underlying stream.
         * 
    @throws NullPointerException if <code>in</code> is <code>null</code>
         
    */

        
    protected FilterReader(Reader in) {
        
    super(in);
        
    this.in = in;
        }


        
    /**
         * Read a single character.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public int read() throws IOException {
        
    return in.read();
        }


        
    /**
         * Read characters into a portion of an array.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public int read(char cbuf[], int off, int len) throws IOException {
        
    return in.read(cbuf, off, len);
        }


        
    /**
         * Skip characters.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public long skip(long n) throws IOException {
        
    return in.skip(n);
        }


        
    /**
         * Tell whether this stream is ready to be read.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public boolean ready() throws IOException {
        
    return in.ready();
        }


        
    /**
         * Tell whether this stream supports the mark() operation.
         
    */

        
    public boolean markSupported() {
        
    return in.markSupported();
        }


        
    /**
         * Mark the present position in the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void mark(int readAheadLimit) throws IOException {
        in.mark(readAheadLimit);
        }


        
    /**
         * Reset the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void reset() throws IOException {
        in.reset();
        }


        
    /**
         * Close the stream.
         *
         * 
    @exception  IOException  If an I/O error occurs
         
    */

        
    public void close() throws IOException {
        in.close();
        }


    }

    可以看到FilterReader就是一个没有抽象方法的抽象类,里面的每个方法都是转调用构造函数传入Reader对象的方法.这种抽象类你不能实例化它,因为实例化它没意义,它还没实现任何Filter的功能.在extends字的具体子类实现了Filter功能,实例化相应的子类才有实际意义.

    我们可以写FilterReader的一个具体子类如下:

     

    /**
     * FilterReader是一个抽象类,不能实例化该类,FilterReader类的每个方法都是实现的,
     * 里面调用的都是FilterReader(Reader in)的传入参数in的方法.    
     
    */

    public   class  UppercaseConvertor  extends  FilterReader {
        
    // 构造方法由FilterReader的protected上升到public的
        public UppercaseConvertor(Reader in) {
            
    super(in);
        }

        
        @Override
        
    public int read() throws IOException{
            
    int c = super.read();
            
    return (-1==c?c:Character.toUpperCase((char)c));
        }

        
        @Override
        
    public int read(char[] buf,int offset, int count) throws IOException{
            
    int nread = super.read(buf, offset, count);
            
    int last = offset + nread;
            
    for(int i=0;i<last;i++)
                buf[i] 
    = Character.toUpperCase(buf[i]);
            
    return nread;
        }


        
    public static void main(String[] args) throws IOException {
            UppercaseConvertor uc 
    = new UppercaseConvertor(new FileReader("d:/log.txt"));
            BufferedReader br 
    = new BufferedReader(uc);
            String r;
            
    while(null!=(r=br.readLine())){
                System.out.println(r);
            }

        }

    }

    这里的FilterReader其实起了一种强制子类类型化(FilterReader)的作用.

    展开全文
  • 所谓"抽象""具体

    千次阅读 2017-10-14 23:52:35
    抽象

    看了一篇电影评析,想谈一下”抽象”

    马克思指出:抽象与具体的辩证法应是”具体-抽象-具体”的方法,是从具体上升到抽象与从抽象上升到具体的内在统一。

    在高中数学课上,我也在数列章节中熟练的运用了假设,验证的方法,在导数中用抽象来求瞬时速度。

    然而,当在生活实践中时,抽象却感觉是如此的难。

    突然觉得,抽象和具体是一种极高的个人能力,它影响你的幸福感,你的人生高度,工作前景,生活品质等。当我们始终着眼于当前的琐碎事情时,其实已经故步自封,坐井观天了。因为你只是完成了这件琐事,没有去升华它。

    • 比如我要开发一个小系统,如果仅仅是为了完成领导布置的所谓功能,其实不是什么难事,难就难在你从领导的角度思考这个系统为什么要有这个功能;用户使用会有什么反馈;与这个系统对接的是哪些系统;对接遇到哪些问题;这个系统在行业内有什么口碑;目前各大公司开发进度如何。
      一旦你用这种思想去考虑了,那么才算真正的了解你做的东西。我想这也是为什么好的销售员的待遇那么高的原因吧,因为他们会站在高处去俯视产品,这种俯视,即为抽象。

    c++中有一种抽象数据类型(ADT, Abstract data type),它就是通过类来表示更通用的类型。

    举个例子:
    写一个具体类:

    typedef unsigned long Item;
    class Stack
    {
    private:
        enum {MAX=10;};
        Item item[MAX];
        int top;
    public:
        Stack();
        bool isEmpty() const;
        bool isFull() cosnt;
        bool push(const Item& item);
        bool pop(Item& item);
    };
    • 这是一个栈的实现,c++用栈管理自动变量的,从业务上讲,栈实现的功能如下:
      (1)创建空栈
      (2)添加数据到栈,即压入栈
      (3)栈顶删除数据,即弹出栈
      (4)查看是否填满/为空
      分析这种业务需求比单纯的关注技术实现要有意义的多。

    当然,实际上栈同时又是一种容器,继续抽象分析上层业务,其实list,vector等都属于一种容器,只是功能稍有差别而已。

    所以关系就是:容器->栈/列表/map->各自类实现

    这种既有的概念仅仅是举个示例而已。

    总结:

    • 1.一个人应该抽象出上层业务逻辑,而不应该仅仅抱着技术细节不放,不然会让思维受到禁锢,无法上升一个层面,容易坐井观天。
    • 2.其实知识最初是没有边界的,由于社会的具体分工才会有专业出现,如果你不能做到将学到的东西融会贯通,那么就属于片面的,断层的,缺少骨骼的。
    • 3.一个人的格局决定了你的抽象能力,科比能带湖人队多次问鼎,退役后在商界当然也能如此。
    展开全文
  • 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符...比如在我的一个报表系统中,有一种报表生成事件,该事件实现run接口,实现具体的报表生成操作,但是它不能被new出来,因为它需要依赖spring的依
  • Java的接口和抽象类 1.抽象类 1.1 语法   抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为...对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求...
  • 这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的...
  • Java 的抽象特性:抽象接口深度解析

    千次阅读 热门讨论 2016-10-27 11:56:48
    对于面向对象编程来说,抽象是它的四大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:...接口和抽象类为我们提供了一种将接口实现分离的更加结构化的方法。总的来说,抽象类是一种模板,而接口是一种契约。
  • 考虑一个小例子抽象描述系统

    千次阅读 2006-03-31 18:22:00
    本文通过一个小例子,试图抽象描述一个系统。考虑一个简化的计费系统,有如下一些实体:1)客户档案,记载客户基本情况2)电价档案,描述电价情况3)用电记录,描述客户在一段时间内的用电情况4)电费档案,描述客户...
  • 抽象代数是现代代数的基础,以其晦涩和高度概括性而著称,如果介绍一些它的实际应用和核心思想,会对大家学习有所裨益.本文的特点是形散(采自网络)而神不散(主题明确). 核心思想 作者:Yuhang Liu 抽象代数...
  • 抽象接口之间的继承和实现关系  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的...
  • 重新认识java(八) ---- 抽象接口

    千次阅读 多人点赞 2017-02-10 18:40:14
    你很清楚的知道什么时候用抽象类,什么时候用接口么? p.s. 多文字预警!
  • 抽象工厂模式:我们现在要对mysql/oracle数据库中的User表进行操作,User表定义如下:public class User { private int uid; private String uname; public int getUid() { return uid; } public void set...
  • java中抽象接口的区别

    千次阅读 2017-10-14 15:08:27
    java中抽象接口的区别一、抽象类用abstract关键字修饰一个类时,这个类叫做抽象类,用abstract修饰一个方法时,这个方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被...
  • 深入理解Java中抽象接口

    千次阅读 2017-01-05 21:11:05
    很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:  一.抽象类  二.接口  三.抽象类和接口的区别  四.实例...
  • 例子说明 Spring提供了很好的架构和很方便的工具,在作为工具使用的同时,也应注意正确使用spring的架构,虽然不是强制的,但是这是spring的精髓。用spring,也要用spring的框架。例如在某次的code review中,看到...
  • 抽象工厂是程序中的一个转折点,也是实现某一不具体的物品代替...
  • 抽象接口的区别是什么

    千次阅读 2021-01-21 19:20:18
    抽象接口的区别是什么 首先来看看接口的定义:接口,在JAVA编程语言中是一个抽象类型,主要是抽象方法的集合,接口中的变量定义必须为public static final类型。接口通常以interface来声明。 抽象类: 从面向对象...
  • Java抽象oop三大特征

    万次阅读 2018-05-27 10:00:37
    抽象方法是一种特殊的方法:它 只有声明,而没有具体的实现 。抽象方法的声明格式为:abstract void fun();抽象方法 必须用 abstract关键字进行修饰 。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类...
  • 因为打算从CNN入手,所以这篇博客呢,会结合CNN的具体例子,说说整个网络到底是一个怎样的流程。当然咯,想要了解细节,还得回到我之前写的那篇博客中去 关于CNN的各种 。这篇博客主要结合了下面三篇论文:  (1...
  • 让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线...
  • 抽象层次

    千次阅读 多人点赞 2017-08-17 21:03:34
    学 会站在不同的抽象层次考虑问题是建立好模型的基础,所以笔者不能不在这里说一些技术无关的“废话”。 首先,抽象层次越高,具体信息越少,但是概括能力越强;反之,具体信息越丰富,结果越确定,但相应的...
  • 抽象工厂

    万次阅读 多人点赞 2018-09-09 18:30:12
    定义 :抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类 创建型 :创建型 适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 强调一系列相关的产品对象...
  • Java:接口和抽象类,傻傻分不清楚?

    千次阅读 多人点赞 2019-04-26 07:28:15
    再来聊聊接口和抽象类。
  • 总结抽象接口的关联和区别

    万次阅读 2016-09-06 10:26:10
    很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:  一.抽象类  二.接口  三.抽象类和接口的区别  四.抽象类...
  • 不依赖于具体抽象是毫无意义的

    千次阅读 2007-06-25 22:22:00
    OO的精髓在于抽象,抽象可以使调用具体实现的高层不关心具体实现的细节,这样做的好处是降低系统的偶合性,增加系统的灵活性.比如这种情况:图1 不成熟的Button和Lamp模型public class OnButton{ private Lamp itsLamp;...
  • C++:浅谈工厂模式与抽象工厂模式

    千次阅读 2016-04-24 13:53:18
    C++:浅谈工厂模式与抽象工厂模式标签: C++ 工厂模式 抽象工厂模式by 小威威之前写过一篇谈模式的文章:单例模式接下来我将浅显的谈谈工厂模式与抽象工厂模式。工厂模式与抽象工厂模式虽有差异,但实现的目的可以...
  • java-面向对象编程-抽象

    千次阅读 2017-04-04 15:12:40
    实际上,在面向对象的概念中,有一个知识点是极容易被人接口混淆的,人们往往会误解为这两者是同一个概念。但不幸的是,两者虽然有相似之处,但却是完全不一样的概念。那么,如此神秘的它到底是什么呢?让我们...
  • 面向对象——比抽象类更抽象

    千次阅读 热门讨论 2014-11-07 23:54:49
    架起机房收费系统的三层结构后,开始加抽象工厂,反射的配置文件,也用到了泛型来解耦。就发现重构的目的是:一步步的抽象,一步步的解耦。其中加了IDAL层,用来灵活的处理BLL层和DAL层之间直接的依赖关系。 重构中...
  • Java 剖析抽象

    千次阅读 2018-07-25 19:57:54
    抽象类只是在普通类的基础上扩充了一些抽象方法... 由于抽象方法没有具体的方法实现,所以其抽象类是不能直接实例化的,使用抽象类的唯一途径是使用它的实现子类。  抽象类使用原则: 所有抽象类必须有其实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 204,321
精华内容 81,728
关键字:

抽象与具体实际例子