抽象方法

抽象

末鹿安然 提交于 2020-03-17 17:53:44
抽象 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。 抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。 如何使用抽象类和抽象方法: 不能直接创建new抽象类对象。 必须用一个子类来继承抽象父类。 子类必须覆盖重写抽象父类当中所有的抽象方法。 覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。 创建子类对象进行使用。 package cn.itcast.day09.demo11;public abstract class Animal {​ // 这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。 public abstract void eat();​ // 这是普通的成员方法// public void normalMethod() {// }​} package cn.itcast.day09.demo11;​public class Cat extends Animal {​ @Override public void eat() { System.out.println("猫吃鱼"); }​} package cn.itcast.day09.demo11;​public class DemoMain {​ public static void main

抽象类和接口

谁说胖子不能爱 提交于 2020-03-17 08:04:20
抽象类:在解决实际问题中,父类一般定义为抽象类,需要这个父类进行继承和多态的处理。存在意义就是被继承,是一种校验机制,预防出错。 抽象类用abstract关键字定义。 抽象类不能直接进行实例化,无法new对象。 抽象类被继承后,需要实现其中的所有抽象方法。 抽象类中可以包含非抽象方法和字段,这个非抽象方法和普通方法是一样的,可以被重写或被子类直接调用 抽象方法:用abstract关键字定义 1. 承载抽象方法的类必须定义为抽象类 2. 抽象方法不能是private的,因为其存在意义就是被重写 3. 抽象方法没有方法体即没有{},存在意义就是被子类重写。 接口:接口是抽象类的延伸,是一种纯粹的抽象类。接口使用interface关键字定义,一个类实现一个接口用implements关键字实现 1.接口中所有方法都是抽象方法,都没有方法体。 2.接口不能被单独实例化。 3.在接口中,方法必须定义为public(可省略)或者abstract(可省略),其他修饰权限是不被编译器认可的。 4.在接口中,所有的字段都是默认为静态常量(final static) 5.接口可以用来实现多继承。一个类可以实现多个接口 Class 类名 implements 接口1,接口2,,, 6.接口命名一般用大写I开头,一般使用adj词性的单词 来源: CSDN 作者: 苗秋秋 链接: https://blog

面对对象 一

邮差的信 提交于 2020-03-17 07:51:12
了解什么是面对对象 oop 看看什么是OOP,Object Oriented Programming,原来就是面向对象的编程啊,还有OOD(面向对象的设计),OOA(面向对象的分析)。那什么是面向对象呢?要想了解这个问题我们要先了解面向过程,这样对比我们就好理解了。 很早很早以前的编程是面向过程的,比如实现一个算术运算1+1 = 2,通过这个简单的算法就可以解决问题。但是随着时代的进步,人们不满足现有的算法了,因为问题越来越复杂,不是1+1那么单纯了,比如一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象。将现实的事物抽象出来,注意抽象这个词是重点啊,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。 举个最简单点的例子来区分 面向过程和面向对象 有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择 1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。 2、去饭店,张开嘴:老板!来一份鱼香肉丝! 看出来区别了吗?这就是1是面向过程,2是面向对象。 面向对象有什么优势呢?首先你不需要知道鱼香肉丝是怎么做的,降低了耦合性。如果你突然不想吃鱼香肉丝了,想吃洛阳白菜,对于1你可能不太容易了,还需要重新买菜,买调料什么的。对于2,太容易了,大喊:老板

设计模式——建造者模式

本小妞迷上赌 提交于 2020-03-16 04:47:54
一、概念:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、UML示意图: 在上图中,定义了一个抽象Builder类并且定义了两个个抽象方法BuildPart(),具体Builder类继承这个抽象builder类并提供BuildPart()方法的实现,这里在不同情形下可能会有多个BuildPart方法,他们代表着这个要构建这个对象需要做的具体工作,但是如果组织执行这些具体工作,以什么顺序执行这些具体工作,则是由Director类决定,Director类在Construct方法中实现了对builder类的实例多个BuildPart工作的组织和顺序调用,通过这个方法就能够使用Builder对象创建出一个正确的Product。 三、优缺点 优点: 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。 每一个具体建造者都独立,因此可以方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 ,而无需修改原代码,符合开闭原则。 可以更加精细地控制产品对象的创建过程 。将复杂产品对象的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。 缺点: 若产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

Java 修饰符

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-16 03:20:55
访问修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以private修饰符指定,在同一类内可见。 共有的,以public修饰符指定,对所有类可见。 受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。 非访问修饰符 static修饰符 静态变量: static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为static变量。 静态方法: static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。 fianl修饰符 final变量: final变量能被显式地初始化并且只能初始化一次。被声明为final的对象的引用不能指向不同的对象。但是final对象里的数据可以被改变。也就是说final对象的引用不能改变,但是里面的值可以改变。 final修饰符通常和static修饰符一起使用来创建类常量。 final方法: 类中的Final方法可以被子类继承,但是不能被子类修改。 final类: final类不能被继承 abstract修饰符 抽象类: 抽象类不能用来实例化对象

PHP 工厂模式

你离开我真会死。 提交于 2020-03-13 11:12:58
(一个创造者、一个产品,将类的实例化和对象的使用分离开,这就是工厂模式的思想) 工厂模式的确是让初学者比较费解的模式。 首先它有简单工厂和抽象工厂之分。但真正算得上设计模式的,是抽象工厂。而简单工厂说实在的仅仅是比较自然的再封装。所以很多教科书会显摆自己的内涵大幅度的介绍抽象工厂,而有意无意的忽略了简单工厂。 实际的情况又正好相反,简单工厂几乎每个人都会用得上,抽象工厂大部分人一辈子都用不上一次。 下面回答你的问题:简单工厂封装了new到底有啥好处? 在实际的项目中,在你通往架构师的道路上,你要培养出一种感觉:要new一个实体对象是件很谨慎的事情(不是指值对象),不要随便new。最好不要自己new,让别人去new,传给你去调用。这样new错了也是别人的事,换而言之你的模块是好质量的,禁得起推敲的。那么都不愿意去new,谁去new?让专门的一个工厂去new。请注意:这仅仅是解决new的方式之一,此外还要反射啊等等。那你必须要等到真正接触大型项目才能有体味的。 作者:余叶 链接: https://www.zhihu.com/question/24843188/answer/49197026 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1.隐藏具体类名,很多类隐藏得很深的,而且可能会在后续版本换掉 2.避免你辛苦的准备构造方法的参数 3

创建型模式之抽象工厂模式

喜你入骨 提交于 2020-03-12 20:43:22
重要程度:5星 3.1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建

JavaSE 学习笔记之继承(五)

一个人想着一个人 提交于 2020-03-12 19:00:43
继 承 (面向对象特征之一) 好处: 1 :提高了代码的复用性。 2 :让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。 java中对于继承, java只支持单继承。 java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。 单继承:一个类只能有一个父类。 多继承:一个类可以有多个父类。 为什么不支持多继承呢? 因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。 但是 java支持多重继承。 A继承 B B继承 C C继承 D。 多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。 所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。 简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。 子父类出现后,类中的成员都有了哪些特点: 1 :成员变量。 当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。 如果想要调用父类中的属性值,需要使用一个关键字: super This :

java学习day10

有些话、适合烂在心里 提交于 2020-03-12 04:52:25
文章目录 接口 接口的定义基本格式 接口的抽象方法定义 接口的抽象方法使用 接口的默认方法使用 接口的静态方法定义 接口的私有方法定义 普通私有方法 静态私有方法 接口的常量定义和使用 接口的内容小结 继承父类并实现多个接口 接口之间的多继承 接口 接口的定义基本格式 接口就是多个类的公共规范 接口是一种引用数据类型,最重要的内容就是其中的抽象方法 如何定义一个接口的格式: public interface 接口名称{ //接口内容 } 备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class 如果是java7,那么接口中包含的内容有: 常量 抽象方法 如果是java8,还可以额外包含有: 默认方法 静态方法 如果是java9,还可以额外包含有: 私有方法 接口的抽象方法定义 在任何版本的java中,接口都能定义抽象方法 注意事项: 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract 这两个关键字修饰符,可以选择性地省略 方法的三要素,可以随意定义 public interface MyInterfaceAbstract { // 这是一个抽象方法 public abstract void methodAbs1 ( ) ; // 这也是抽象方法 abstract void methodAbs2 ( ) ;

java-抽象类的特点

别说谁变了你拦得住时间么 提交于 2020-03-10 19:43:57
1、抽象类和抽象方法必须用abstract关键字修饰。 -  abstract class 类名() -  public abstract void eat(); 2、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口。 -  一个抽象类如果没有抽象方法,是可以定义为抽象类的。这么做的目的只有一个,就是不让其他类创建本类对象,交给子类完成。 3、抽象类不能实例化。那么抽象类如何实例化呢? -  按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。 4、抽象类的子类 -  要么是抽象类 -  要么重写抽象类中的所有抽象方法 5、abstract不能和哪些关键字共存? -   abstract和static *  被abstract修饰的方法没有方法体。 *  被static修饰的方法可以用类名.调用,但是类名.调用抽象方法是没有意义的。 -   abstract和final *  被abstract修饰的方法强制子类重写 *  被final修饰的方法不让子类重写,所以他两是矛盾的 -   abstract和private *  被abstract修饰是为了让子类看到并强制重写 *  被private修饰不让子类访问,所以他两是矛盾的 来源: CSDN 作者: Cici$ 链接: https://blog.csdn.net/m0_43455210