抽象类

利用接口及抽象类设计实现

一曲冷凌霜 提交于 2020-01-09 13:08:07
1.定义接口圆形CircleShape(),其中定义常量PI,默认方法area计算圆面积。 2.定义圆形类Circle实现接口CircleShape,包含构造方法与求周长方法。 3.定义圆柱继承Circle实现接口CircleShape,包含构造方法,圆柱表面积,体积。 4.从控制台输入圆半径,输出圆面积及周长。 5.从控制台输入圆柱底面半径及高,输出圆柱底面积、圆柱表面积及体积。 public class yuan { public static void main(String[] args) { Circle test=new Circle(5); System.out.println("周长为"+test.makec()); System.out.println("面积为"+test.area(test.ban)); Cylinder test2=new Cylinder(10, 5); System.out.println("圆柱底面积为"+test2.dimianji()); System.out.println("圆柱表面积为"+test2.getbmj()); System.out.println("圆柱体积为"+test2.gettj()); } } interface CircleShape{ public double PI=3.1415926535;

java中继承的深度理解!!

[亡魂溺海] 提交于 2020-01-09 04:58:31
继承: 1,提高了代码的复用性。 2,类与类之间产生了关系,关系的出现,就是多态的由来。 java只支持单继承,不支持不多继承。 原因:当出现多个类中有相同方法时,子类不确定调用的是哪一个。 其实就是父类中的方法有方法体。 但是java支持多层继承。在多层继承中,父类定义都是共性成员。 所体现的内容: 1,父类是不断向上抽取而来的。 2,既然父类体现的共性内容,那么在使用一个继承体系时, 只需要查阅最顶层父类即可了解该体系的基本功能。(查阅API技巧之一) 3,只要建立最子类的对象即可对该继承体系进行应用。 子父类的出现,子类因为持有一个父类引用super,可以获取到父类中非私有的成员。 如同子类中也有一个份一样。 覆盖(复写)override. 对于成员函数,当子父类中出现了一模一样的函数时,会出现一个覆盖操作。 在运行时,会运行子类中的方法。 覆盖注意: 1,子类覆盖父类方法,必须权限大于等于父类。 2,静态覆盖静态。 3,覆盖只发生在函数上。 什么时候使用覆盖呢? 可以通过覆盖的形式对父类的功能进行重新定义。 比如:对功能进行修改或者对功能进行升级。 注意:不要在子类中定义新功能。还要以父类中的声明为主。 class Demo { void show() { System.out.println("Demo show"); } } main() { //Demo d =

JAVA学习第十二天

余生长醉 提交于 2020-01-08 23:18:46
抽象类 针对一个事物,如果这个事物并不是具体事物,而是概括性的(需要抽象修饰这个类),比如动物,应该定义不应该定义具体类 class Animal{},并且动物的eat()/sleep()每个具体动物吃和睡不同的,所以这些功能应该声明(方法不能方法主体) 将当前这个类定义为抽象类! 抽象类的特点: 抽象类不能实例化!(不能创建对象) 注意事项: 1)如果一个类中有抽象方法,那么这个类一定是抽象类 2)抽象类中一定是抽象方法吗? 不一定都是抽象方法,可以是非抽象的,也可以抽象的! 3)抽象类的子类是抽象类还是非抽象类呢? 子类是抽象类的情况: 一般情况没有意义的! 父类已经不能实例化(抽象了) 应该采用的父类引用指向子类对象 例如:Animal a = new Cat() ; 子类已经抽象了,无法实例化 抽象类其他特点: 抽象类成员特点: 成员变量 既可以是变量也可以是常量 成员方法: 既可以是抽象的(子类必须重写),也可以是非抽象的 构造方法: 抽象类中是可以存在构造方法(无参/有参),作用:对该类对象的数据进行构造初始化 abstract跟哪些关键字冲突 private:私有的,外界不能访问的,被private修饰的方法不能被继承 final :状态修饰符 被final修饰的成员方法,不能被重写,而抽象类中的抽象方法必须让子类重写这个功能! static:静态,跟类相关

王道JAVA随堂笔记

ⅰ亾dé卋堺 提交于 2020-01-08 09:59:41
DAY 9 一、多态 1.多态是什么 多态是某一个事物在不同时刻或者不同条件下表现出来的不同状态。 java语言中的多态:“同一个对象”的行为(方法),在不同的时刻或条件下,表现出不同的效果。 2.多态的发生 多态的发生条件: 继承(多态一定要继承行为) 子类,一定要覆盖父类中,要发生多态的方法(行为) 父类引用指向子类实例 3.多态 多态: 编译时多态(方法重载): 2. 运行时多态:今天所讲的多态 4.多态中成员访问的特点 成员属性和成员方法: 编译看左边 : 引用变量的类型,规定了我们通过引用变量能访问到的对象的成员 运行看右边 : 究竟实际执行的方法 多态的优缺点 优点: 解决代码冗余的问题 使我们的程序可扩展性更好 缺点: 多态不能访问子类特有的方法 (为了解决多态无法访问子类特有的方法,我们可以使用向上转型和向下转型。) 为了保证向下转型是安全的,这里我们采用 instanceof 来判断当前对象是否是当前类的对象。 instanceof语法:对象名 instanceof 类名 返回值是boolean型; **注意:**null instanceof 任意类型结果都是false 二、抽象类 1.引入 当一个方法只有方法声明的时候,也就意味着它没有具体的方法实现,——> 抽象方法 必须使用abstract关键字来定义 2. 当一个类中包含了抽象方法

Java之接口

半腔热情 提交于 2020-01-07 21:16:02
接口含义: 接口(interface)是抽象方法和常量值定义的集合。 接口语法: 1.接口用关键字interface表示 格式:interface 接口名 { } 在Java语言中Interface也可以表示一种类型 2.类实现接口用implements表示 格式:class 类名 implements 接口名 { } 接口原因: 1.有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。 但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。 2.有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系, 仅仅是具有相同的行为特征而已。 3.接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要... 则必须能...”的思想。 4.继承是一个“是不是”的关系,而接口实现则是“能不能”的关系。 5.接口的本质是契约,标准,规范,就像我们的法律一样,制定好后大家都要遵守。 接口特点: 1.用interface来定义。 2.接口中的所有成员变量都默认是由public static final修饰的。 3.接口中的所有抽象方法都默认是由public abstract修饰的。 4.接口中没有构造器。 5.接口采用多继承机制。 6.接口不能直接实例化。 7.接口的子类,可以是抽象类也可以是具体类。 注意事项: 1.一个类可以实现多个接口

Java并发(五)模版方法模式

只愿长相守 提交于 2020-01-07 19:55:04
1. 模版方法结构 模板方法的本质其实就是类的继承,模板方法模式需要开发抽象类和具体子类的设计之间的协作,我们实际工作中应该有很多这样的场景,比如我们通常会在业务逻辑层定义好Service类的抽象方法,而实际的业务逻辑实现会交给ServiceImpl类。模板方法模式的类结构图大致如下: 抽象模板 (AbstractTemplate) 角色有如下责任: 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。定义并实现了一个模板方法,这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。AbstractQueuedSynchronizer就是这样一个抽象模板。 具体模板 (ConcreteTemplate) 角色又有如下责任: 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。ReentrantLock算是这样一个具体模板,不过ReentrantLock把自己的实现又委托给了内部实现类Sync。 模板模式的关键是: 子类可以置换掉父类的可变部分

javaSE继承和抽象类

耗尽温柔 提交于 2020-01-07 18:55:53
继承 继承的概述和好处 提高代码复用性 使类与类之间产生关系 继承的格式 继承的案例 继承后成员访问特点 继承后的特点—成员变量 继承后成员变量的访问规则 重名 子父类中出现同名的成员表量时,子类会优先访问自己对象中的成员变量,如果此时想访问父类成员变量,需要用到super关键字 super关键字:super可以用于变量和方法 不重名 不重名不影响 继承后的特点—成员方法 继承后成员方法的的访问规则 重名 则创建子类对象调用该方法的时候,子类对象会优先调用自己的方法 不重名 不影响,对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法 方法重写 方法重写与方法重载的区别 方法重写:子方法中出现与父方法的方法名,返回值类型,参数列表都相同的方法,会出现覆盖效果 使用场景:发生再子父类之间的关系。子类继承了父类的方法,但是子类觉得父类方法无法满足自己的需求,子类重新写了个与父类同名的方法,以便覆盖父类的方法。 Overrider重写注解 标记在方法上面,提高代码可读性,也可以防止出错 注意事项 方法重写是在发生父子类之间的关系 子类方法覆盖父类方法,必须要保证权限大于等于父类权限 子类方法覆盖父类方法,返回值类型,函数名和参数列表都要一模一样 方法重载:局部方法中出现方法名和返回值类型相同,参数列表不同的方法

深入理解python中抽象类的概念

心已入冬 提交于 2020-01-07 08:21:43
1什么是抽象类 抽象类是一个特殊的类,只能被继承,不能实例化 2为什么只能被继承,不能实例化 有个例子很好地说明了这点。 我们可以构造香蕉、苹果、梨之类的类,然后让它们继承水果这个的基类,水果的基类包含一个eat函数。 但是你有没有想过,我们可以将香蕉、苹果、梨实例化,去吃香蕉、苹果、梨。但是我们却不能将水果实例化,因为我们无法吃到叫水果的这个东西。 所以抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。 3为什么要有抽象类的存在 抽象类约束子类实现抽象方法,在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。 4一段代码理解抽象类的完整用法: import abc class ChouxiangleiA(metaclass=abc.ABCMeta): # 这里的ChouxiangleiA就是抽象类,必须指定abc模块中的元类ABCMeta @abc.abstractmethod # 定义抽象方法,这里的写法是固定的, def abstract_method(self): """子类中必须定个抽象类中的方法,这里固定用pass""" pass class B(ChouxiangleiA): # B作为抽象类ChouxiangleiA的子类,必须定义抽象方法 def abstract

C# 抽象类

半世苍凉 提交于 2020-01-07 04:23:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 抽象类 抽象类是对类的进一步抽象,上一篇中我们定义的Animal类中,可定义为抽象类。 using System; namespace Jerry { abstract class Animal { public string name; public int age; public abstract void Eat(); public abstract void Sleep(); } class Dog : Animal { public override void Eat() { Console.WriteLine("吃骨头"); } public override void Sleep() { Console.WriteLine("在床肚睡觉"); } } class Cat : Animal { public override void Eat() { Console.WriteLine("吃鱼"); } public override void Sleep() { Console.WriteLine("在床上睡觉"); } } class Program { static void Main(string[] args) { Animal cat = new Cat(); cat.name =

Java——抽象类和接口

我是研究僧i 提交于 2020-01-06 22:10:54
一、抽象类 abstract 修饰的类叫做抽象类 特点: 不可以实例化对象(通过 向上转型 类的继承) 类中可以定义抽象类的方法(继承类必须重写抽象的方法) 抽象类中可以没有抽象方法 demo public abstract class Animal { //抽象类 private int num ; public . . . } 二、抽象方法 abstract修饰的方法叫做抽象方法,抽象方法只有方法的声明而没有方法的实现(没有 方法体 ), 包含抽象方法的类本身必须被声明为抽象的 demo public abstract class Animal { private int num ; public abstract void shout ( ) ; //由abstract修饰,没有方法体 } 三、抽象类的继承 派生类继承抽象类必须 实现抽象类中所有抽象的方法 ,否则派生类也必须定义为 抽象类 demo pubilc class Dog extends Animal { public void shout ( ) { System . out . println ( "woof" ) ; } } public abstract class Cat extends Animal { //由于没有实现抽象方法,所以把这个类定义为抽象类 } public class