抽象方法

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 .

策略模式的孪生兄弟——对状态模式的深度复习总结

五迷三道 提交于 2020-01-20 08:58:49
前言 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂逻辑判断的,那么他们有什么不同呢? 回忆状态模式—— 策略模式的孪生兄弟——对状态模式的深度复习总结 :状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象表现得就好像修改了它的类一样。 状态模式的关键是各个状态子类必须知道下一个状态是什么 , 且要把逻辑判断转移到各个状态子类中,客户端不需要了解状态迁移的顺序。 状态模式虽然类图和策略模式几乎一样,但是策略模式的目的是针对单一算法,在运行时能替换,客户端需要事先了解策略,主动去选择合适的策略,不存在状态的自动迁移。 下面总结复习职责链模式。 责任链(职责链,Chain of Responsibility(CoR))概述 责任链,Chain of Responsibility(CoR),也叫职责链模式或者职责连锁模式,同状态模式一样,也是对象的行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,对象由每一个对象对其下家的引用而连接起来形成一条链,客户端发出的请求在这个链上传递,直到链上的某一个对象决定能处理此请求。 注意:发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任,所以该模式被称作职责链模式。 责任链模式的特点

柔情痞子 提交于 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 :实现其他接口。每个类可以实现多个接口。省略该部分则表示没有实现任何接口。 类体部分  

设计模式

混江龙づ霸主 提交于 2020-01-20 01:00:02
设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。” 设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦。然而如果设计模式在正确的时间被用在正确地地方,它将是你的救星。 起初,你会认为“模式”就是为了解决一类特定问题而特别想出来的明智之举。说的没错,看起来的确是通过很多人一起工作,从不同的角度看待问题进而形成的一个最通用、最灵活的解决方案。也许这些问题你曾经见过或是曾经解决过,但是你的解决方案很可能没有模式这么完备。 虽然被称为“设计模式”,但是它们同“设计“领域并非紧密联系。设计模式同传统意义上的分析、设计与实现不同,事实上设计模式将一个完整的理念根植于程序中,所以它可能出现在分析阶段或是更高层的设计阶段。很有趣的是因为设计模式的具体体现是程序代码

java面试题大全-基础方面

我只是一个虾纸丫 提交于 2020-01-19 03:53:23
Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答

Java编程思想学习笔记(9)

◇◆丶佛笑我妖孽 提交于 2020-01-19 03:49:55
Java编程思想学习笔记(9) 抽象类与抽象方法 首先先看例子,之前的一系列乐器的例子,把基类Instrument声明为抽象类。 UML图: abstract class Instrument { private int i; // Storage allocated for each //抽象方法,不能有“{}” public abstract void play(Note n); public String what() { return "Instrument"; } public abstract void adjust(); } public class Brass extends Instrument{ public void play(Note n) { print("Brass.play() " + n); } public void adjust() { print("Brass.adjust()"); } } public class Percussion extends Instrument{ public void play(Note n) { print("Percussion.play() " + n); } public String what() { return "Percussion"; } public void adjust() {} }

接口 and 抽象类

蓝咒 提交于 2020-01-18 01:21:43
java面试分享-------接口和抽象类的含义和区别 先来看定义: 接口 是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何feld都是隐含着public static final的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。 抽象类 是不能实例化的类,用abstract关键字修饰class,其目的主要是代码重用。除了不能实例化,形式上和一般的Java类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关Java类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。 具体来说,接口就是 行为的抽象,就是你能做什么的抽象,而抽象类是你是由什么做的。 比如 ArrayList ,源码里面是这样的: public class ArrayList < E > extends AbstractList < E > implements List < E > , RandomAccess , Cloneable , java . io . Serializable 其中,继承了一个抽象类和四个接口。 抽象类要怎么写呢?来看看 ArrayList 的继承的抽象类 AbstractList : public abstract class

JAVA程序员面试宝典

一笑奈何 提交于 2020-01-17 01:15:20
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面。抽象并不5. 打算了解全部问题,而6. 只是选择其中的一部分,7. 暂时不8. 用部分细节。抽象包括两个方面,9. 一是过程抽象,10. 二是数据抽象。 11. 继承:继承是一种联结类的层次模型,12. 并且允许和鼓励类的重用,13. 它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,14. 这个过程称为类继承。新类继承了原始类的特性,15. 新类称为原始类的派生类(子类),而16. 原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,17. 并且类可以修改或增加新的方法使之更适合特殊的需要。 18. 封装:封装是把过程和数据包围起来,19. 对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,20. 即现实世界可以被描绘成一系列完全自治、封装的对象,21. 这些对象通过一个受保护的接口访问其他对象。 22. 多态性:多态性是指23. 允许不同24. 类的对象对同25. 一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,26. 很好的解决了应用程序函数同27. 名28. 问题。 2、String是最基本的数据类型吗?

c#中的interface abstract与virtual

笑着哭i 提交于 2020-01-17 01:13:11
interface用来声明接口 1 .只提供一些方法规约,不提供方法主体 如 public interface IPerson { void getName(); // 不包含方法主体 } 2 .方法不能用public abstract等修饰,无字段变量,无构造函数。 3 .方法可包含参数 如 public interface IPerson { void getAge( string s); } 一个例子(例1): public interface IPerson { IPerson(); // 错误 string name; // 错误 public void getIDcard(); // 错误 void getName(); // right void getAge( string s); // right } 实现interface的类 1 .与继承类的格式一致,如 public class Chinese:IPerson {} 2 .必须实现interface中的各个方法 例2,继承例1 public class Chinese:IPerson { public Chinese() {} // 添加构造 public void getName() {} // 实现getName() public void getAge( string s) {} // 实现getAge

C# 之抽象类和抽象方法

本秂侑毒 提交于 2020-01-17 01:10:26
概述:abstract 关键字 抽象类不能被实例化,抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写( override ), 一个抽象类可以同时包含抽象方法和非抽象方法。 abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 抽象类具有以下特性: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。 抽象方法具有以下特性: 抽象方法是隐式的 virtual 方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod(); 实现由 overriding 方法提供,它是非抽象类的成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 在静态属性上使用 abstract 修饰符是错误的。 在派生类中,通过包括使用