抽象类

11 Java抽象类 详解

冷暖自知 提交于 2020-01-20 12:38:57
目录 1.抽象类的基本概念 2.抽象类的使用 3.抽象类的使用限制 4.抽象类的应用——模板设计模式 1.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加 抽象方法 的组成部分。 那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而 抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。 而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。 abstract class A { //定义一个抽象类 public void fun ( ) { //普通方法 System . out . println ( "存在方法体的方法" ) ; } public abstract void print ( ) ; //抽象方法,没有方法体,有abstract关键字做修饰 } 2.抽象类的使用 我们先看范例。 范例:直接实例化抽象类的对象 package com . wz . abstractdemo ; abstract class A { //定义一个抽象类 public void fun ( ) { //普通方法 System . out .

转 Java 208道面试题及部分答案 补充部分答案

元气小坏坏 提交于 2020-01-20 08:41:26
转自 https://www.cnblogs.com/chen1005/p/10481102.html ---恢复内容开始--- 一、Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。   JDK是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的 2.== 和 equals 的区别是什么? 答:==是比较两个对象的地址,equals是比较连个对象的内容 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 答:不对!hashCode()相同,不代表连个对象就相同。hashCode值是从hash表中得来的,hash是一个函数,该函数的实现是一种算法,通过hash算法算出hash值,hash表就是 hash值组成的,一共有8个位置。   相反,equals()相同,hashCode()一定相同。这个是正确的! 4.final 在 java 中有什么作用? 答: final的作用随着所修饰的类型而不同: final修饰类中的属性或者变量:无论属性是基本类型还是引用类型, final所起的作用都是变量里面存放的“值”不能变

柔情痞子 提交于 2020-01-20 07:59:03
  类是最基本的面向对象单元,是用于定义一组对象共同具有的状态和行为的模板。 类声明部分   一般的类声明格式为:[public ][abstract | final ][strictfp ]class 类名[ extends 父类名][ implements 父接口名]    访问限制符 :public属于访问限制符。没有被访问限制符修饰的类只能在当前包内被调用。     public:被public修饰的类是一个公共类。可以被任意类或对象调用。每个Java源文件只能有一个public修饰的类。    abstract :被abstract修饰的类是一个抽象类。抽象类不能实例化,其中的抽象方法需要由子类重写。    final :被final修饰的类是一个最终类。最终类不能被继承,其中的方法不能被重写。    strictfp :被strictfp修饰的类是一个精确浮点类。该类中的所有代码都将严格地进行计算。严格约束意味着所有表达式的结果都必须是IEEE-754算法对操作数预期的结果,以单精度和双精度格式表示。    extends :继承其他类。每个类只能继承一个类。每个类默认继承Object类,省略该部分则表示继承Object类。    implements :实现其他接口。每个类可以实现多个接口。省略该部分则表示没有实现任何接口。 类体部分  

Java_接口

耗尽温柔 提交于 2020-01-20 07:08:36
3.9、接口(重点) 3.9.1 、接口的基本概念 接口属于一种特殊的类,如果一个类定义的时候全部由 抽象方法和全局常量 所组成的话,那么这种类就称为接口,但是接口是使用interface关键字进行定义的。 interface A { // 定义接口 public static final String INFO = "Hello World ." ; public abstract void print() ; } interface B { public abstract void get() ; } 那么在接口之中,也同样存在了抽象方法,很明显,接口对象无法直接进行对象的实例化操作,那么接口的使用原则如下: · 每一个接口必须定义子类,子类使用implements关键字实现接口; · 接口的子类(如果不是抽象类)则必须覆写接口之中所定义的全部抽象方法; · 利用接口的子类,采用对象的向上转型方式,进行接口对象的实例化操作。 下面给出子类实现接口的语法格式: class 子类 [extends 父类] [implemetns 接口1,接口2,...] {} 通过格式可以发现,每一个子类可以同时实现多个接口,但是只能继承一个父类。 范例: 让子类实现接口 interface A { // 定义接口 public static final String INFO = "Hello

设计模式读书笔记

折月煮酒 提交于 2020-01-20 06:56:19
面向对象的编程中,不要对于所有属性都实现getter和setter,那样会暴露数据,使其容易被修改,退化为面向过程的方法。 在类内部向外部必须提供一个类对象时,这样,相关的属性就会被修改。应避免外部可以修改内部对象属性。 对于例如Constant类、Util类等采用面向过程来组织的类尽量做到职责单一,定义一些细化的小类。 接口和抽象类 抽象类( is-a ) 抽象类不允许被实例化 抽象类可以包含属性和方法 子类继承抽象类必须实现抽象类中的方法 解决代码复用,一般是自底向上 接口( has-a ) 接口不能包含属性 接口只能声明方法 实现接口时,必须实现接口中全部方法(除了默认方法) 解决抽象,一般是自顶向下 设计原则 基于抽象编程而非实现编程,通过抽象,实现扩展性,灵活性。 命名脱离实际实现 组合和继承 继承用来表示 is-a 关系,可以解决代码复用性,但是,当涉及到继承层次深,情况多变且复杂时,很容易造成冗余,分支多,这种情况下少用或者不用继承。 继承的作用:表示 is-a 关系,支持多态,代码复用,可以通过接口、组合、委托三者结合来替换。 结构稳定,不易替换,可以使用继承,比如基本的几个设计模式,模板设计模式、建造者模式等,或者业务逻辑不复杂,继承层次浅,可以使用继承。其他的层次深,较复杂的使用接口+组合+委托更好。 来源: CSDN 作者: 淡墨w青衫 链接: https:/

Java中的其他修饰符

孤街浪徒 提交于 2020-01-20 05:29:05
abstract - 抽象的   1、修饰类 - 抽象类,如果一个类是抽象的,那么这个类不能被实例化,只能被继承,所以抽象类一般都是父类;   2、修饰方法 - 抽象方法,如果一个方法是抽象的,那么这个方法不能有实现,含有抽象方法的类一定是抽象类, 但抽象类不一定包含抽象方法;     - 如果一个非抽象类继承了一个抽象类,则这个非抽象的子类必须实现父类中定义的所有抽象方法,除非这个子类也是抽象的;     - 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。     - 如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。     所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。     只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!     为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。     Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖

桥接模式

白昼怎懂夜的黑 提交于 2020-01-20 04:51:16
,抽象类与具体的实现类在结构上是相互独立的,两者的相互变化并不会影响到彼此,只要“桥梁”没变,两者的变化并不会影响到彼此。桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 参照菜鸟教程的桥接模式,具体实现如下图所示 #region 圆设置类 class CircleSet { public CircleSet(int _radius) { radius = _radius; } public int radius { get; set; } } #endregion #region 绘制接口 interface DrawAPI { void DrawCircle(CircleSet circleset); } #endregion #region 具体绘制类 class RedCircle : DrawAPI { public void DrawCircle(CircleSet circleset) { Console.WriteLine("draw circle radius:{0} ; color:red", circleset.radius); } } class GreenCircle :

菜鸡的Java笔记 第二十四 - java 接口的基本定义

风流意气都作罢 提交于 2020-01-20 03:15:26
1.接口的基本定义以及使用形式 2.与接口有关的设计模式的初步认识 3.接口与抽象类的区别 接口与抽象类相比,接口的使用几率是最高的,所有的设计几乎都是围绕着接口进行的 但是要想把接口彻底弄明白,需要很长一段时间 接口是一种特殊的类,但是在接口里面的组成与类不同,比类的组成部分简单,主要由抽象方法和全局常量所组成 而接口使用 interface 关键字来定义 范例:定义一个接口 interface A{ // 定义了一个接口 public static final String MSG = "Hi"; public abstract void ptint(); } public class Interface{ public static void main(String args[]){ // 无法实例化,但是可以调用 System.out.println(A.MSG); } } 在以后不管学习到系统类库的使用还是自己写代码的时候,接口里面的主要组成(98%)都是抽象方法 当一个接口定义完成之后,需要遵循如下的步骤进行接口的使用 接口一定要定义子类,子类利用 implements 关键字来实现(实现这个词可以理解为继承)接口,一个子类可以同时实现多个接口 秒杀抽象类的单继承局限,一个抽象类只能够被一个子类所继承 接口的子类(如果不是抽象类)那么必须覆写接口中的全部抽象方法

Java_接口

感情迁移 提交于 2020-01-20 03:12:59
 接口与抽象类相比,接口使用率更高,所有设计都围绕着接口设计 接口是特殊的类,但里面的组成与类不同,主要有 抽象方法 和 全局常量 组成。 接口使用interface定义 定义一个接口: interface A{   public static final String MSG = "Hello";   public abstract void print(); } 接口定义完成后,需要遵循: 接口一定要定义子类,子类利用implements实现接口,一个子类可以同时实现多个接口,一个抽象类只能被一个子类继承 接口的子类(如果不是抽象类),必须覆写接口中全部抽象方法 接口对象利用子类对象的向上转型进行实例化操作 范例:使用接口 interface A{   public static final String MSG = "Hello";   public abstract void print(); } interface B{   public abstract void fun(); } class X implements A,B{ //X类同时实现了A和B两个父类接口   public void print(){}   public void fun(){} } public class TestDemo{   public static void main(String

java abstract

拟墨画扇 提交于 2020-01-19 23:23:39
一、抽象方法 public abstract void eat(); 二、抽象类 package cn.wt.day08.Demon12; public abstract class Animal { public abstract void eat(); } 注意·:含有抽象方法的类,一定是抽象类;抽象类不一定含有抽象方法 三、注意事项 1、抽象类不能直接实例化,要通过抽象类的子类实现实例化 2、子类一定要重写(overrider)抽象类的所有抽象方法 例子 1 package cn.wt.day08.Demon12; 2 3 public abstract class Animal { 4 public abstract void eat(); 5 public abstract void sleep(); 6 } Animal.java 1 package cn.wt.day08.Demon12; 2 3 public abstract class Dog extends Animal { 4 @Override 5 public void eat() { 6 System.out.println("狗吃骨头"); 7 } 8 } Dog.java 1 package cn.wt.day08.Demon12; 2 3 public class TuDog extends