抽象类

Java抽象类与接口的区别

别等时光非礼了梦想. 提交于 2020-02-11 11:49:36
抽象类 接口 抽象类与接口区别 1.抽象类    抽象类用abstract来修饰,例如: package com.test.abstractaaa; public abstract class TestAbstract { } 抽象类是用来捕捉子类的通用性的,它不能被实例化,只能用作子类的超类,抽象类是被用来创建继承层级里子类的模板,例如JDK中的GenericServlet类中部分代码: public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable{ public void init(ServletConfig config) throws ServletException {   this.config = config;   this.init(); } public void init() throws ServletException {} public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;    public void destroy() {} }

java 抽象类

ⅰ亾dé卋堺 提交于 2020-02-11 11:48:08
当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。 抽象方法的定义:通过abstract关键字来修饰的类称为抽象类; 我的总结: 抽象类用private 修饰,里面可以有用private 修饰的方法(没有方法体),强制子类进行覆写; 可以理解为:具有某些公共方法的一个总结类。 可以定义被abstract 修饰的抽象方法 抽象方法只有返回类型和方法签名,没有方法体。 备注: 抽象类可以含有普通方法 抽象类不能创建实例对象(不能new ) 需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类 列举常见的几个抽象类: 流的四个基本父类 InputStream ,OutputStream ,Reader ,Writer 我的总结: 抽象类是类的一种特殊情况: 据有类的一切特点, 但是不能实例化; 一般的都得带有抽象方法。 抽象类不可以实例化,有时看到的近似实例化是多态机制的体现,并不是真正的实例化。 Eg: Socket s = new Socket(); OutputStream os = s.getOutputStream() ; 左边是OutputStream类型变量的声明

面对对象(接口)

拜拜、爱过 提交于 2020-02-11 11:46:37
一. 接口(interface),是一种引用数据类型。    interface 差不多= = abstract class    1)接口是has a (继承是is a):“像”我中的一种,是继承体系之外的,用于功能扩展!想扩展就实现,不想就不用实现。   2)接口中只能声明抽象方法和常量且声明格式都是固定的,定义的所有变量都是static final类型的,只不过可以省略。 注意:接口中声明常量和抽象方法的格式是固定的 1 public interface Test { 2 /*public abstract final*/int SPEED=100;//声明常量 3 /*public abstract 省略了,写也对*/void showInfo();//声明抽象方法 4 }    3)接口中的方法都是公共抽象方法 1 public interface MyInterface { 2 public abstract void showInfo(); 3 void showInfo3(); 4 5 // 推荐写法 6 public void showInfo2(); 7 } 二.接口的多态现象    1)接口不能有构造器,因为不能实例化何以初始化,接口只能被“实现”。   2)具体类实现了一个接口,则必须实现全部的抽象方法,若没有全部实现,则该类为抽象类。所以说

设计模式(思路)

怎甘沉沦 提交于 2020-02-10 20:31:23
设计模式七大原则: 单一责任 : 一个类尽量不要拥有太多的责任 接口隔离:接口设计的要尽量小,避免实现一个接口实现了多余的方法 依赖倒转:细节依赖于抽象,抽象不依赖于细节 里氏替换:尽量不要重写父类的方法 开闭原则:对扩展开放,对修改关闭 迪米特法则:最小知道原则,对尽量避免了解其他类的内部实现,减少耦合 合成复用原则:少用继承,而用依赖组合聚合 设计模式六大关系: 依赖 泛化 实现 聚合 组合 关联 创建型设计模式: 单例模式: 饿汉式实现 懒汉式实现 - double-check( 双重判断 ) 静态内部类实现 枚举实现 应用场景 : 需要频繁创建和销毁的对象,创建一次就够用而且需要频繁使用的对象(数据库访问,工具类) 源码中使用: RunTime 类 利用饿汉式单例模式实现, static 静态生成对象,系统调用时直接返回 . 工厂模式: 抽象工厂 : 工厂不只是一个类 而是一个工厂族,由接口定义,具体的想要的工厂实现由子类工厂提供。 源码中使用: Calendar 类 利用简单工厂模式 , 对外提供一个静态方法,用来根据日期和地域生产 Calendar 对象。 满足原则: 开闭原则 原型模式: 浅拷贝 : 实现 cloneable 接口,重写 clone() 方法 . 只会克隆对象的普通属性,如果有引用类型的属性则会都指向同一个地址引用 ( 克隆一个人

抽象类和接口

为君一笑 提交于 2020-02-10 13:33:23
抽象类abstract (父类包含子类的共同特征。一个父类设计得非常抽象,以至于它都没有任何具体的实例) 不能用new操作符创建抽象类的实例。但是抽象类可以作为一种数据类型。 抽象类的 构造方法 定义为protected,因为它只能被子类使用。 包含抽象方法的类必须是抽象类,抽象类可以不包含抽象方法。 即使父类是具体的,子类也可以是抽象的。子类可以覆盖父类的方法并将它定义为abstract。 接口interface (指明多个对象的共同行为) 不能用new操作符创建接口的实例。可以使用接口作为引用变量的数据类型或类型转换结果。 接口是一种与类相似的结构,只包括 常量 和 抽象方法 。 接口中所有成员变量的修饰符都是public static final,方法都是public abstract,所以Java允许忽略这些修饰符。 一个类只能继承一个父类,但一个类却可以实现一个或多个接口。 Cloneable接口没有常量和方法,称为标记接口。实现Cloneable接口的类的对象可以使用Object类中的clone()方法克隆。 相同点 都不能被实例化。接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。 不同点 抽象类可以提供成员方法的实现细节,接口中的方法不能有具体的实现,只有实现接口的类才能实现接口中定义的方法; 抽象类中的成员变量可以是各种类型的

java基础:9.1 抽象类

我是研究僧i 提交于 2020-02-10 13:29:04
在前几章,我们学了父类与继承等操作。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为 抽象类。 在父类里定义一些方法,但这些方法不能在父类中实现,因为他们的实现取决于几何对象的具体类型。这样的方法称为 抽象方法 ,在方法头中用 abstract 修饰符表示。 抽象方法是非静态的 抽象类和常规类很像,但是 不能使用new操作符创建它的实例 。抽象方法只有定义而没有实现,它的实现由子类提供。 一个包含抽象方法的类必须声明为抽象类。 抽象类的构造方法定义为protected ,因为它只被子类使用。创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。 不能使用new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型 GeometricObject[] object = new GeometricObject[10]; object[0] = new Circle(); 是合法的 // GeometricObject.java // 包含抽象类的父类 public abstract class GeometricObject { private String color = "white"; private boolean filled; private java.util.Date dateCreated;

抽象类

若如初见. 提交于 2020-02-10 13:28:08
一、什么是抽象类? 在父类中,有一些子类的共同方法,但这些方法在父类中没有具体的实现,这样的方法就称为抽象方法,在方法头中使用abstract修饰符表示。包含有抽象方法的类就称为抽象类。 在UML图形记号中,抽象类和抽象方法的名字用斜体表示。 抽象类不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含了抽象方法的类必须声明为抽象类。 抽象类的构造方法定义为protected,因为它只能被子类使用。 抽象类的几点说明: (1)抽象方法不能包含在非抽象类中,也就是说,只要包含了抽象方法,这个类就一定要定义为抽象类。在抽象类扩展的非抽象子类中,必须实现所有的抽象方法。抽象方法是非静态的。 (2)可以定义一个不包含抽象方法的抽象类。 (3)抽象类不能使用new操作符来初始化。 (4)子类可以覆盖父类的方法并将它定义为abstract。 (5)即使子类的父类是具体的,这个子类也可以是抽象的。 (6)不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。 二、为什么要使用抽象类? 举例: 设计一个几何图形对象GeometricObject,设计一个方法比较两个几何面积是否相等。如果没有抽象方法getArea(),则无法实现equalArea()。 abstract class Geometric { public abstract

JAVA抽象类和接口

别来无恙 提交于 2020-02-10 13:25:59
注意事项: 1、非抽象类不能包含抽象方法;在一个有抽象类扩展出来的非抽象类中,所有的抽象方法都必须实现,即使这个子类不使用它们。抽象方法是非静态的。 2、抽象类不能用new操作符实例化,但仍然可以定义它的构造方法,这种构造方法将在它子类的构造方法中调用。 3、子类可以声明为抽象的,即使它的父类是具体的;子类可以覆盖它父类的方法,将其声明为abstract。这种方法非常少用,但是当父类中方法的实现在子类中无效时,这种方法就有用了,这种情况下,子类必须声明为抽象的。 4、不能用new操作符创建抽象类的实例,但是,抽象类可以用作数据类型: GeometricObject[] objects=new GeometricObject[10]; 5、在接口中,所有的数据域都是public finial static的,所有的方法都是public abstract的,由于这个原因,Java可以忽略这些修饰符,下面的声明是等价的: public interface T1{ public static final int K=1; public abstract void p(); } 等价于 public interface T1{ int K=1; void p(); } 6、利用extends关键字,接口可以继承其他接口,例如: public interface NewInterface

Java抽象类的使用

故事扮演 提交于 2020-02-10 11:13:15
@author Administrator 类继承的主要用于利用扩充 已有类的功能,但是对之前的继承操作而然会发现,子类可以有自己的选择任意来决定是否要覆写某一个方法,这个时候父类无法对子类做出强制性约定(强制你必须覆写某一个方法)这种情况下我们往往不会采用类的继承 (在实际开发之中很少会出现继承一个已经完善的类 ) *什么是完善的类 *比如: *class person { 这个 person 类算不算完善的类 (所谓完善 的类是 可以直接可以使用的类就是完善的类 ) *} 而是必须要继承抽象类 ,在以后进行父类(SuperClass )的设计的时候我们优先 考虑的一定是抽象类。 抽象类的基本定义 抽象类的主要作用在于对子类中的覆写方法 ,进行约定,在抽象类里面可以定义一些抽象方法以实现这样的 一个 约定,那么抽象方法的是使用了 abstract 关键词定义的并且没有提供方法体的方法,而抽象方法所在 的类必须 为抽象类,抽象类必须使用 abstract 关键词来进行定义 (直白点说就是在普通类的基础上追加抽象方法就是抽象类)。 范例:定义一个抽象类 package duixiang ; abstract class Message { //定义一个抽象类 private String type ; public abstract String getConnectInfo ( )

java设计模式-适配器模式

て烟熏妆下的殇ゞ 提交于 2020-02-10 04:00:05
概念: 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。 分类: 1 类适配器 2 对象适配器 3 接口适配器 一 类适配器: 通过继承来实现适配器功能, 当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。   详见下方实例:我们以apple与android的充电线转接为例,让安卓充电线可以给苹果手机充电 安卓接口 //安卓接口 public interface Android { void isAndroid(); } 苹果接口 //苹果接口 public interface Apple { void isApple(); } 苹果接口实现类 //苹果接口实现类 public class ApplerUser implements Apple { //实现苹果接口 void isApple() { System.out