精华内容
下载资源
问答
  • 抽象类特点 抽象类和抽象方法必须使用abstract关键字修饰 public abstract class 类名{} public abstract void eat(); 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类 抽象类不能实例化 抽象类只能...

    抽象类

    父类知道子类一定要完成某个功能,但是每个子类完成的情况是不一样的。
    子类以后也只会用自已重写的功能,那么父类的该功能就可以定义成抽象方法,子类重写调用子类自己。

    抽象方法

    抽象方法,没有方法体,只有方法签名。
    拥有抽象方法的类,只有方法签名,必须用abstract修饰。
    拥有抽象方法的类必须定义成抽象类。

    抽象类是为了被子类继承,约束子类要重写抽象方法。
    注意:一个类继承了抽象类,必须重写完抽象类的全部抽象方法,否刚这个类也必须定义成抽象类。

    抽象类的特点

    • 抽象类和抽象方法必须使用abstract关键字修饰
    public abstract class 类名{}
    public abstract void eat();
    
    • 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类
    • 抽象类不能实例化
      抽象类只能参照多态的方式,通过子类对象实例化。这叫抽象类多态。
    • 抽象类的子类
      要么重写抽象类中的所有抽象方法
      要么是抽象类
    public abstract class Animal {
    	public abstract void eat();
    	
    	public void sleep() {
    		System.out.println("睡觉");
    	}
    }
    
    public abstract class Dog extends Animal{
    
    }
    
    public class Cat extends Animal{
    	@Override
    	public void eat() {
    		System.out.println("猫吃鱼");	
    	}
    }
    
    public class Test {
    	public static void main(String[] args) {
    //		Animal a = new Animal();
    		
    		Animal a = new Cat();
    		a.eat();//猫吃鱼
    		a.sleep();//睡觉
    
    	}
    }
    

    抽象类的特征是:有得有失。

    有得:抽象类得到了拥有抽象方法的能力。
    有失:抽象类失去了创建对象的能力。(抽象类不能创建对象)。

    抽象类是否有构造器,抽象类是否可以创建对象,为什么?

    抽象类作为类一定有构造器,而且抽象类必须有构造器。
    提供给子类创建对象调用父类构造器使用的。

    抽象类虽然有构造器但是抽象类不能创建对象。
    抽象方法没有方法体,创建对象不能执行,所以不能创建对象。

    抽象本身就意味着不能具体化。
    抽象类除了有得有失,类的其他成分它都具备。

    抽象类存在的意义

    抽象类存在的意义有2点:

    1. 抽象类的核心意义就是为了被子类继承(就是为了派生子类),否则抽象类毫无意义。(基本准则)
    2. 抽象类体现的是模板思想,部分实现,部分抽象。

    抽象类的注意事项

    1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
      理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

    2. 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的。
      理解:子类的构造器中,有默认的super()需要访问父类构造器。

    3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。

    5. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
      理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

    展开全文
  • 接口和抽象类的区别在面试中问的比较广泛,同时也是开发者必须要明白的基础性知识,下面就来捋一下: 1.从 特征上比较 (1)接口可被类实现(implement),也可以被接口扩展继承(extends),抽象类只能被子类继承...

    接口 抽象类 的区别在面试中问的比较广泛,同时也是开发者必须要明白的基础性知识,下面就来捋一下:

    1.从 特征上比较
    (1)接口可被类实现(implement),也可以被接口扩展继承(extends),抽象类只能被子类继承(extends)。
    (2)接口只能有方法声明不可变常量
        方法声明:会被自动设置为public abstract,接口中方法平时会省略掉public,但是实现方法必须显示声明public
        不可变常量:定义的变量只能是公共的静态的常量,域变量会被自动设置为public static final

    /**
     * 菜单接口
     */
    public interface MenuService {         //接口名 补全public
    
      int defaultTotal=33;                       //1.1:一般写法
      public static final int defaultTotal2=40;  //1.2:常量补全public static final,和上面类型相同
    
      Double getFoodTotal(String restaurantName);       //2.1:一般写法
      abstract Double getFoodPrice(String foodName);    //2.2:方法声明补全抽象方法关键词abstract
      public abstract int getFoodNum(String foodName);  //2.3:方法声明补全抽象方法关键词public abstract
    
    
      default String getBaseInfo(){        //3.1:java8 引入默认方法,必须实现
          //defaultTotal=defaultTotal+1;       //错误,长岭不能更改
            return "This is a menu";
        }
      static String getRestaurantName(){   //3.2:java8 引入静态方法,必须实现
            return "MFC";
        }
    }
    

     抽象类可以有方法声明(即抽象方法)、具体的方法和属性(可以是静态常量和普通变量)。

    /**
     * 菜单抽象类  //补充public,abstract可以省略,只要有抽象方法就是一个抽象类
     */
    public  abstract class MenuAbstract {
        int defaultTotal=33;                       //1.1:变量
        public static final int defaultTotal2=40;  //1.2:常量,和上面的变量不同
    
        //Double getFoodTotal(String restaurantName);      //2.1:方法声明错误用法,abstract声明的类中抽象方法必须使用abstract
        abstract Double getFoodPrice(String foodName);    //2.2:方法声明一般写法
        public abstract int getFoodNum(String foodName);  //2.3:方法声明补全关键词public
    
        public String getBaseInfo(){  //2.4:具体方法,public可省略
            defaultTotal=defaultTotal+1;
            return "This is a menu";
        }
        static String getRestaurantName(){  //2.5
            return "MFC";
        }
    //    default String getBaseInfo(){    //2:抽象方法不支持默认default方法
    //        return "This is a menu";
    //    }
    }
    

    (3)用instanceof可以检查一个对象是否属于某个特定类或是否实现了某个接口。可用来检测是否实现了目标接口或目标类。
    (4)Java8新添加相关特性
           》》》接口可以含有静态方法,但必须实现该静态方法。
           值得注意的是:实现类实现多个接口时,可能会实现多个接口,各个接口可能含有同参同名的方法,使用该方法时,要使用“接口.接口静态方法”,而不是“实现类.接口静态方法”;如果接口要定义同名同参的静态方法,但是不能使用@Override重写接口中的方法,使用“实现类.实现类静态方法”的形式访问即可实现类中的静态方法。
            》》》接口中可以含有默认方法,但必须实现它。


    2.从 设计上做比较
    (1)接口和抽象类都是用来抽象具体对象的,两者均能体现多态性,但是接口的抽象级别最高,两者均不可直接实例化,若要实例化,必须先实现所有抽象方法。
    (2)接口是设计的结果,即从无到有,大家制定契约和规则,签约类必须要完全遵守、实现该契约中的方法,即所有方法都是有意义且必须要实现的;侧重于行为约束,主要抽象功能
     抽象类是重构的结果,即从有到有 的设计,更侧重与内部优化与合理性,是为了继承扩展,实现代码的重用,主要抽象了事物(包含属性和方法)。

    如何理解上面代码中的菜单的设计?
          当一家餐厅可能有多个门店,每个门店可能需要根据当地的实际消费,人数等情况自定义价格,折扣等操作,所以就出现了不同的需求。
          菜单接口:由专门人员去设计,3个开发者根据接口去开发,每个人负责一种门店菜单的开发,接口从无到有,要求所有门店菜单开发者(实现者)必须遵守这样的接口,实现每个方法,侧重于契约精神、规则精神。
          菜单抽象类:可以将所有门店的共同行为或属性抽取出来放在抽象类,派生的门店菜单实现类就不需要多次重写相同的行为代码了;并且,不同门店的个性化需求,可以通过实现抽象方法自定义;

    为什么要设计接口和抽象类?
            接口设计不是必须的,如果一个系统较为复杂,需要多人合作,则可以使用接口,设计者制定接口后,就不再轻易改变接口(除非改动对接口有意义),其他人根据接口具体实现即可。如果系统较为简单,一个人即可实现,无需设计接口,否则就要牵一发动全身。不用为了以后的扩展怎么滴怎么滴的大费周章的去设计,真到那个时候再去重构设计也不迟。
           抽象类的设计也不是必须的,它的设计师为了更好的优化重构代码,实现代码的扩展、复用。
     

    展开全文
  • 3.抽象类意义可以通过以下例子说明:不准赌博。 那么请你写出赌博这个方法吧,很难完成吧!因为具体的赌博方法有很多,你不能把赌博固定为任何的实际形式,那么赌博这个概念还有什么价值呢? 这里,“赌博”是个...

    1.对象是现实世界对象的计算机表示,对象包含两个特征:状态与动作。

    2.类就像房屋的设计图纸,是一个描述性的文档。

    3.抽象类的意义可以通过以下例子说明:不准赌博。

    那么请你写出赌博这个方法吧,很难完成吧!因为具体的赌博方法有很多,你不能把赌博固定为任何的实际形式,那么赌博这个概念还有什么价值呢?

    这里,“赌博”是个抽象方法,它的意义在于能概括地代表所有具有具体的的赌法。如果我们在谈话中不关心具体的赌法的时候,就是可以用这个词。

    4.接口的意义在于,它给出了屈从于Java技术单继承规则又能部分实现多继承效果的解决方案。举个例子:

    Class 战马 extends 动物 implements 运输工具,战员{

     

    }

    UML图:

    战马是动物,是运输工具,也是战员。

    5.内部类的存在有两个意义:一是,内部类的名字是受外部类限定的,这样就可以有效地避免一个文件夹下的名字的冲突。二是,内部类的对象可以访问包含着它的外部类对象的私有成员,这样就避免了传递很多参数的麻烦。

    展开全文
  • 抽象类特点

    2020-09-13 14:24:32
    抽象类特点 抽象类特点:abstract, 抽象方法,只有方法名字,没有方法实现 1. 不能new(实例化)这个抽象类,只能靠子类去实现它;约束!...抽象类存在意义是什么? 抽象出来,提高开发效率 ...

    抽象类的特点

    抽象类的特点:abstract, 抽象方法,只有方法名字,没有方法实现
    1. 不能new(实例化)这个抽象类,只能靠子类去实现它;约束!
    2. 抽象类中可以写普通的方法
    3. 抽象方法必须在抽象类中
    抽象的抽象:约束
    
    抽象类不能new,那么它存在构造器吗?  答案是存在的
    抽象类存在的意义是什么?   抽象出来,提高开发效率
    
    展开全文
  • 抽象类

    2019-07-25 11:41:18
    抽象类特点抽象类的特点抽象方法的特点 (鸡肋呦 : 食之无味,弃之可惜,抽象类不是要重点掌握的) 1.特征: ​ 不能new对象,必须使用abstract关键字定义 ​ 抽象类必须定义(只定义不实现)抽象方法,否则会失去...
  • 学习抽象类前先理解下面这段话: 问你个问题,你知道什么是“东西”吗?什么是“物体”吗? “麻烦你,小王。帮我把那个东西拿过来好吗” 在生活中,你肯定用过这个词--东西。 小王:“你要让我帮你拿那个...
  • 抽象类和接口的区别以及抽象类和接口的使用场景

    千次阅读 多人点赞 2019-05-30 18:15:44
    一、抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法...
  • java 抽象类特点

    千次阅读 2019-04-21 19:59:38
    抽象类特点:   1 抽象方法和抽象类使用 abstract 修饰   2 只要有抽象方法的类,必须是抽象类   3 抽象类中不一定有抽象方法   4 没有抽象方法的抽象类意义,防止外界创建对象 防止外界...
  • 抽象类和接口

    2019-11-22 12:33:52
    抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法构造方法的访问方式普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原...
  • 接口和抽象类

    2018-12-08 13:39:33
    接口和抽象类接口和抽象类的定义接口和抽象类的区别选择使用抽象类和接口的依据 最近重新温故Java基础知识,理解设计模式,但是代码量不够可能很多理解的不够到位,先记一下,以后再来更新。接口和抽象类使用起来很...
  • Java抽象类

    2021-05-28 20:31:05
    抽象类 抽象类的局限性:只有单继承...抽象类存在意义:抽象出来,提高开发效率 //abstract抽象类的局限性:单继承,不能多继承,接口可以多继承 public abstract class Action { public abstract void doSomething
  • 抽象类 抽象类: java中被abstract进行修饰的类; 抽象类可以拥有构造方法/字段/属性/方法,但不能...抽象类是否存在构造器? 抽象类中可以有构造器,只是抽象类不能通过new实例化对象 当继承自抽象类的子类进行实
  • 抽象类的由来: 我们在高度抽象一类事物的时候,由于是提取的此类事物公共行为,但具体到某个具体的事物的时候,同一行为又会有不同的表现。所以我们不应该在抽象阶段就给...抽象类特点: 抽象类抽象方法用 abstrac
  • 抽象类和抽象方法

    2021-09-10 09:59:40
    文章目录一、抽象类二、抽象方法三、abstract 关键字,哪些...抽象类用abstract 修饰,方便了具体类的定义,其存在意义在于对自身进行初始化,供其子类使用。 抽象类一定是个父类,因为抽象类是不断抽取共性需求
  • 抽象方法和抽象类

    2018-04-14 12:09:31
    抽象修饰符:abstract特点: 抽象类:实例抽象类毫无意义,是天生的父类;只是用来被继承; 抽象方法:没有方法体,必须存在抽象类中,必须被子类实现(重写),除非子类也是抽象类...
  • Java 抽象类和接口

    2021-03-18 15:55:20
    抽象类: 抽象方法没有方法体只有方法签名,必须要用abstract修饰方法 拥有抽象方法的类必须为抽象类,即类必须... 抽象类存在意义: 1.为了被子类继承,否则毫无意义(基本准则) 2.抽象类体现的是模板思想,部
  • 抽象类 抽象类和一般类的异同点

    千次阅读 2014-09-27 17:55:47
    抽象类: 抽象:笼统,模糊,看不懂!不具体。 特点: 1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。 抽象方法必须定义在抽象类中。该类必须也被abstract修饰。 2,抽象类不可以被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,729
精华内容 37,491
关键字:

抽象类的特点和存在的意义