抽象方法

为什么用 抽象类,接口

我的未来我决定 提交于 2020-02-08 20:34:03
刚学 Java 语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有方法体的东西,我实现它又有什么用呢?我从它那什么也得不到,除了一些方法名,我直接在具体类里加入这些方法不就行了吗? 为什么一定要有抽象类这个概念?为什么就不能把这个父类写成一个具体的类,子类再继承它不就可以了吗?何必弄一个抽象类出来,还要弄一些没有方法体的抽象方法,弄得又象接口又象类的,让人捉摸不定。 当我开始学习java设计模式,真正走进面向对象设计的大门之后,我才发现,自己对面向对象设计的理解原来是那么的片面,那么的肤浅,根本就没有真 正理解面向对象思想的精髓,在某一种程度上还受着面向过程的影响,以为弄出了一个个类,就算是面向对象了,而其实还是被过程所驱使着。 面向对象思想,最关键的就是 抽象 。 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 呢,面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 既然面向对象设计的重点在于抽象,那Java接口和Java抽象类就有它存在的必然性了。

Java面向对象大致梳理

你。 提交于 2020-02-07 21:19:19
面向对象思想、 面向对象思想概述: Java设计语言面向对象: Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。 类和对象: 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物 属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。 类与对象的关系 : 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。 面向对象之封装: 概述: 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

抽象类和接口的应用 + 面试题

孤街浪徒 提交于 2020-02-07 16:16:02
抽象类和接口的应用 + 面试题 抽象类 定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 abstract 修饰的类就叫做抽象类。 抽象类使用 示例代码,如下: abstract class AbstractAnimal { public AbstractAnimal() { System.out.println("Init AbstractAnimal."); } static String name = "AbstractAnimal"; public abstract void eat(); public void run() { System.out.println("AbstractAnimal Run."); } } class Animal extends AbstractAnimal { public static void main(String[] args) { AbstractAnimal animal = new Animal(); animal.run(); System.out.println(animal.name); animal.eat(); } // 必须重写抽象父类方法 @Override

设计模式常见面试题汇总

北战南征 提交于 2020-02-07 14:07:54
设计模式常见面试题汇总 1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。 **分类** **包含** **关注点** 创建型模式 工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式 关注于对象的创建,同时隐藏创建逻辑 结构型模式 适配器模式、过滤器模式、装饰模式、享元模式、代理模式、外观模式、组合模式、桥接模式 关注类和对象之间的组合 行为型模式 责任链模式、命令模式、中介者模式、观察者模式、状态模式、策略模式、模板模式、空对象模式、备忘录模式、迭代器模式、解释器模式、访问者模式 关注对象之间的通信 下面会对常用的设计模式分别做详细的说明。 2.什么是单例模式? 答:单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例。 优点:不会频繁地创建和销毁对象,浪费系统资源。 使用场景:IO 、数据库连接、Redis 连接等。 单例模式代码实现: class Singleton { private static Singleton instance = new Singleton(); public

抽象类和接口的应用

一笑奈何 提交于 2020-02-07 13:10:57
抽象类和接口的应用 + 面试题 抽象类 定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 abstract 修饰的类就叫做抽象类。 抽象类使用 示例代码,如下: abstract class AbstractAnimal { public AbstractAnimal() { System.out.println("Init AbstractAnimal."); } static String name = "AbstractAnimal"; public abstract void eat(); public void run() { System.out.println("AbstractAnimal Run."); } } class Animal extends AbstractAnimal { public static void main(String[] args) { AbstractAnimal animal = new Animal(); animal.run(); System.out.println(animal.name); animal.eat(); } // 必须重写抽象父类方法 @Override

继承(补充)

我怕爱的太早我们不能终老 提交于 2020-02-07 08:59:25
抽象: 关键字:abstract; 抽象类的特征: 1、抽象类不能被实例化; 2、抽象类中的方法可以有方法体,也可以没有; 3、抽象方法必须在子类中实现(必须被重写),一般方法可以被重写,也可以不被重写; 4、抽象方法必须在抽象类中; 抽象方法: 1、抽象方法没有方法体 2、抽象方法必须在抽象类里 3、抽象方法必须在子类中被实现,除非子类是抽象类 final final 类:不能被继承; final 方法:不能被重写; final 变量:不能被修改; 使用 final 修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的 final Dog dog = new Dog(“欧欧”); dog.name = “美美”;//对象属性可以改变 dog = new Dog(“亚亚”);//错误,变量不可以再指向其他对象; 对变量定义:final 和 static 成对出现: 1、变量必须强制初始化(赋值) 2、不能被再次赋值 3、常量名称必须都大写,多个单词组合时中间用下划线隔开 来源: CSDN 作者: 没有感情的机器人 链接: https://blog.csdn.net/weixin_45800832/article/details/103757581

Java面向对象的多态

限于喜欢 提交于 2020-02-07 04:48:46
  Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性   多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态   引用多态的含义就是:父类的引用可以指向它本类的对象,不仅如此父类的引用还可以指向子类的对象,这就是引用多态   用简单的代码来看一下引用多态的含义:   动物类:Animal 1 public class Animal { 2 public Animal(){ 3 System.out.println("Animal类的构造方法被执行"); 4 } 5 }   狗类:Dog 1 public class Dog extends Animal{ 2 public Dog(){ 3 System.out.println("Dog类的构造方法被调用"); 4 } 5 } 然后来测试一下: 1 public class Initail { 2 public static void main(String[] args){ 3 Animal animal = new Animal(); //父类的引用指向本类对象 4 Animal dog = new Dog(); //父类的引用指向了子类对象 5 Dog dog1 = new Dog(); //子类引用只能指向子类对象 6 } 7 } 由代码可以看出

设计模式

雨燕双飞 提交于 2020-02-06 17:13:10
第一章节 工厂模式 1.面向对象的好处? 2.UML图 3.简述简单工厂模式   假如我们需要写一个加减乘除的计算器程序,如果使用面向过程的思维来解决这个问题,一旦我们修改了其中某些需求(比如增加开根号的运算),那么我们就会关于运算部分的代码,这对于一些系统来说是很有风险的操作。也不符合面向对象的封装的方法。   我们可以把界面和运算进行分层出来,界面类处理界面的事情,运算类只处理运算逻辑。这样是非常可以扩展的,如果我们需要增加一种运算,我们只需要多写一个运算类继承运算基类。   如何让计算机知道你将要使用哪个运算类呢?及对象的实例化问题,到底要实例化谁,未来会不会增加实例化对象,这些很容易变化的部分。我们可以使用一个单独的类来做这个创造实例的过程,这就是工厂。 编程是一门技术,更加是一门艺术 第二章节 策略模式 1.商场促销问题   比如商场打不同的折扣,双十一打五折,公司周年庆打四折,每周五打八折。商场不仅仅有打折问题,还有 满多少返现多少,比如满300返现100。商场积分问题,100块可以积10分。这一系列的问题,都应考虑到,不可能每次都要去修改代码后重新编译部署。这就是一个策略问题。   对于打折问题,以前学过简单工厂,我们可以写一个基类,然后打不同的折扣去继承这个基类,这样写不符合面向对象封装的方法。不管打多少折都是打折,没必要写那么多的类。 2.策略模式    策略模式

JAVA基础_IO流

﹥>﹥吖頭↗ 提交于 2020-02-06 03:15:51
字符流和字节流: 字节流的两个基类: InputStream,OutputStream 字符流两个基类: Reader,Writer ··字符流的Writer: import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo01 { public static void main(String[] args) throws IOException { //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。 //而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。 //其实该步骤就是明确数据要存放的目的地。 FileWriter fw = new FileWriter("demo.txt"); //调用write方法,将字符串写入流中。 fw.write("abcde"); //刷新流对象中的缓冲中的数据 //将数据存入到目的地中。 //fw.flush(); //关闭流资源,关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地。 //和flush区别;flush刷新后,流可以继续使用,close刷新后,会将流关闭。 fw.close(); } } IO异常的处理方式: public class IOExceptionDemo {

23种设计模式

孤街浪徒 提交于 2020-02-06 03:04:44
1.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码:(是线程安全的) public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是static public static void doSomething(){ } } 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源; ● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然