抽象类

抽象类与模板设计模式

风格不统一 提交于 2020-01-25 18:53:30
目录 一,抽象类 1,什么是抽象类? 2,为什么要有抽象类? 3,抽象类注意事项 二,模板设计模式 一,抽象类 1,什么是抽象类? 抽象类就是抽象的类,所谓的抽象是相对于具体而言的。一般来说,具体类有直接对应的对象,而抽象类没有,它所表达的是抽象概念。如:动物的抽象概念,而熊猫、兔子等则是具体对象。 在Java中,使用abstract关键字来声明抽象类和抽象方法。示例如下: public abstract class Animal{ public abstract void eat(); } 定义了抽象方法的类必须被声明为抽象类,抽象类可以没有抽象方法。抽象类除了不能实例化对象之外,类的其他功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。 抽象类不能创建对象,要创建对象必须使用它的具体子类 。一个普通类在继承抽象类后,必须实现抽象类中定义的所有抽象方法,如下: public class Panda extends Animal{ public void eat(){ System.out.println("I like to eat bamboo!!!"); } } 抽象类虽然不能使用new,但可以声明抽象类的变量,然后引用抽象类具体子类的对象,如下所示: Animal animal = new Panda(); animal.eat(); 下面来看一个完整的示例

抽象类

。_饼干妹妹 提交于 2020-01-25 16:50:12
抽象类概述 在java中,一个 没有方法体 的方法应该定义为抽象类,而类中如果有抽象方法,该类必须定义为抽象类 抽象类的特点 1、抽象类和抽象方法必须使用 abstract 关键字修饰 public abstract class Student { . . . } public abstract void eat ( ) ; 2、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类 3、抽象类不能实例化 抽象类如何实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象类多态 4、抽象类的子类 要么重写抽象类中的所有抽象方法 要么是抽象类 抽象类的成员特点 1、成员变量 可以是变量 也可以是常量 2、构造方法 有构造方法,但是不能实例化 构造方法的作用是什么呢? 用于子类访问父类数据的的初始化 3、成员方法 可以有抽象方法: 限定子类必须完成某些动作 也可以有非抽象方法 :提高代码的复用性 来源: CSDN 作者: 0和1的尽头又是啥 链接: https://blog.csdn.net/qq_43205282/article/details/103841531

JavaSE学习总结第10天_面向对象5

人走茶凉 提交于 2020-01-25 09:33:01
10.01 运动员和教练案例分析 教练和运动员案例:运动员分乒乓球运动员和篮球运动员,教练分乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。 分析: 10.02 运动员和教练案例实现 1 //定义一个说英语的接口 2 interface SpeakEnglish 3 { 4 //说英语 5 public abstract void speak(); 6 } 7 8 //定义人的抽象类 9 abstract class Person 10 { 11 private String name; 12 private int age; 13 14 public Person() {} 15 16 public Person(String name,int age) 17 { 18 this.name = name; 19 this.age = age; 20 } 21 22 public String getName() 23 { 24 return name; 25 } 26 27 public void setName(String name) 28 { 29 this.name = name; 30 } 31 32 public int getAge() 33 { 34 return age; 35 } 36 37 public void setAge(int

day09_继承、super、this、抽象类

梦想与她 提交于 2020-01-25 07:00:28
继承 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示: 其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。 继承描述的是事物之间的所属关系,这种关系是: is-a 的关系 。例如,图中兔子属于食草动物,食草动物属于动物。在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。例如父类是员工,子类是讲师,那么“讲师就是一个员工”。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。 继承主要解决的问题是共性抽取。 定义 继承: 就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。 好处 提高代码的复用性。 类与类之间产生了关系, 是多态的前提。 继承的格式 通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下: 继承演示,代码如下: 定义员工类Employee,做父类 package demo01; public class Employee { // 定义name属性 String name; // 定义员工的工作方法 public void work() { System.out.println("尽心尽力地工作"); } }

C#,依赖注入

一世执手 提交于 2020-01-25 05:41:44
1.5 实现依赖注入1.5.1 背景介绍 设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个(或某类)对象,我们常常会对它们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。 这个过程中有个环节被忽略了——谁来选择客户程序需要的满足抽象类型的具体类型呢?通过后面的介绍你会发现很多时候创建型模式可以比较优雅地解决这个问题。但另一问题出现了,如果您设计的不是具体业务逻辑,而是公共库或框架程序,这时候您是一个“服务方”,不是您调用那些构造类型,而是它们把抽象类型传给您,怎么松散地把加工好的抽象类型传递给客户程序就是另一回事了。 这个情形也就是常说的“控制反转”,IOC:Inverse of Control;框架程序与抽象类型的调用关系就像常说的好莱坞规则:Don’t call me, I’ll call you. 参考Martin Fowler在《Inversion of Control Containers and the Dependency Injection pattern》一文,我们可以采用“依赖注入”的方式将加工好的抽象类型实例“注入”到客户程序中,本书的示例也将大量采用这种方式将各种依赖项“注入”到模式实现的外部——客户程序。下面我们结合一个具体的示例看看为什么需要依赖注入

抽象类实现多态

為{幸葍}努か 提交于 2020-01-25 05:22:47
抽象成员必须标记为abstract,并且不能有任何实现。 抽象成员必须在抽象类中。 抽象类不能被实例化。 子类继承抽象类后,必须把父类中的所有抽象成员重写。 抽象成员的访问修饰符不能是private。 抽象类是有构造函数的,虽然不能被实例化。 如果父类的抽象方法中有参数,那么继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。 如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候也必须要有返回值。 如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法重写。 如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义成抽象类 来源: CSDN 作者: Jeff~李嘉诚 链接: https://blog.csdn.net/weixin_44126152/article/details/104047495

日常作业2019.1.21

岁酱吖の 提交于 2020-01-25 03:43:44
作业(向上转型、向下转型) 宠物类  父类 package com.job1_21; /** * 宠物类 * @author Administrator * */ public abstract class Pet { /** * 宠物属性 */ protected String name; protected String sex; protected int health; protected int love; /** * 构造方法 */ public Pet() {} public Pet(String name,String sex,int health,int love) { this.name =name; this.sex=sex; this.health=health; this.love=love; } /** * 宠物属性setter getter */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getHealth

设计模式之创建型模式

心已入冬 提交于 2020-01-25 01:28:23
1.单例模式 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 实现:一个类的对象的产生是由类构造函数来完成的,如果想限制对象的产生,一个办法就是将构造函数变为私有的(至少是受保护的),使得外面的类不能通过引用来产生对象;同时为了保证类的可用性,就必须提供一个自己的对象以及访问这个对象的静态方法 放一个类图直观描述 实现方式: 饿汉式 懒汉式 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式) 定义:主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的 a.简单工厂模式 定义:简单工厂模式又称静态工厂方法模式,是工厂方法模式的一种特例,两者归为一类。它存在的目的很简单:定义一个用于创建对象的接口 模式组成部分: 工厂类角色:用于商业逻辑和判断逻辑,由一个具体类实现 抽象产品角色:一般是具体产品继承的父类或者实现的接口,由接口或者抽象类实现 具体产品角色:工厂类所创建的对象就是此角色的实例,由一个具体类实现 模式实例 工厂方法模式 定义:去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担 实现:使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”,分担了对象承受的压力,使得结构变得灵活起来 模式组成部分: 1.抽象工厂角色:

JavaOOP继承

本秂侑毒 提交于 2020-01-25 00:00:40
一.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 eg: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。 类的继承语法 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { } class 子类 extends 父类 { } eg: //动物父类 public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); } public void sleep(){ System.out.println(name+"正在睡"); } public void

CPP 设计模式

我只是一个虾纸丫 提交于 2020-01-24 22:55:31
备忘录模式 在一个类内部记录另一个类的快照状态的模式。可以再合适的时候跳回复用 引用文字 设计备忘录的三大步骤: 设计记录的节点,存储记录 2.设计记录的存储: vector list map set 可以使 链表 图 数组 树 3.操作记录的类,记录节点状态,设置节点状态,显示节点状态 策略模式 策略模式针对一组算法,将每一个算法封装到具有共同接口的独立类中。 从而使得他们可以相互转换,策略模式可以在不影响客户端的情况下使算法发生改变。策略模式把行为和环境分离开来,环境类负责维持和查询行为类。 策略模式依赖多态,策略模式的抽象类,接口,抽象类的指针可以访问所有子类对象(纯虚函数) 各种策略的实现类。都必须集成抽象类。 策略的设置接口类。设置不同的策略 ======= 设计模式 抽象工厂模式 工厂模式: 客户类和工厂类分开。 消费者需要任何产品,只需要和工厂请求就可以了。 消费者无需修改就可以接纳新产品,缺点是当产品修改时,工厂类也要做相应的修改 ======= 设计模式 简单工厂模式 基类存放数据 派生类存放操作 再实现一个调用各个操作的静态类,调用时返回派生类指针 代码: #include <iostream> #include <string> using namespace std; class OP { public: double a; double b;