抽象类

抽象类和接口的应用

一笑奈何 提交于 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 09:37:26
什么是面向对象:   是一种分析问题的方式,为了增强程序的可扩展性。(是一种思想) 面向对象的特性是什么:   1.封装:   原则:对外开放,对内封闭,对外扩展开放,对内修改封闭,提供一个接口供外部访问。   类和对象本身就是封装的体现;   属性封装了字段;   方法封装了一堆代码;   类封装了方法;   程序集封装了类;   是指把事物的状态和行为封装在类中,使用这个类的人完全不需要知道类的内部是怎么实现的,只需要调用类中的属性或方法,来实现功能。   2.继承:   是类与类的关系,是指某个类中要使用另外一个类中的一些属性或方法时,这个类只需继承那个类,这个类就可以使用那个类中所有的属性和方法了,这个类就称为子类,而被继承的那个类称为父类,继承实现代码复用,继承主要是为了体现多态;   能不能继承私有成员:(存在歧义)     1>子类继承父类,创建子类对象时,私有成员也被分配了内存空间;     2>继承只是面向对象的概念,继承的目的是为了子类使用,实现代码重用,体现多态;     3>即便是继承了但不能访问,所以没有意义;      简单的理解:     1>子类继承父类;     2>拥有父类的属性和方法(构造函数是不能继承的,只能在子类中调用父类中的构造函数);     3>实现代码复用,提高效率;     4>体现多态;   3.多态:    

继承(补充)

我怕爱的太早我们不能终老 提交于 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:53:33
1,抽象,封装,继承,多态是面向对象程序设计中得四个特点.   2,面向对象得软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现.   可概括为如下过程:分析用户需求,从问题中抽取对象模型;细化模型,设计类,包括类的属性和类间的   相互关系,同时观察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现   上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案.   3,面向对象程序设计方法的优点是:可重用性,可扩展性,可管理性.   4,类的定义:class前的修饰符分为访问控制符和非访问控制符两大类.访问控制符包括public和private.   非访问控制符包括abstract(抽象),final(最终).   5,final类是最终类,是不能有子类的类.abstract和final不能同时修饰一个类,因为抽象类本身没有具体对象,   需要派生出子类后在创建子类的对象.而最终类不可能有子类.   6,创建对象的格式为: 类名 对象名=new 构造方法(参数);注意前面是类名后面是构造方法.   注意构造方法没有返回类型,也不能写void,主要用于完成类对象的初始化工作,一般不能直接由编程   直接调用,而是用new运算符来调用.   7,如果class前面由public修饰符,则默认构造方法的前面也应该有public修饰符.   8

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 } 由代码可以看出

JAVA面向对象的三大特性 多态

天大地大妈咪最大 提交于 2020-02-07 04:46:05
多态 指的是对象的多种形态 继承是多态的实现基础,别忘了子父类要有继承关系. 多态特性: 一、引用多态 1.父类引用可以指向本类对象 Animal obj1 = new Animal(); 2.父类引用可以指向子类对象 Animal obj2 = new Dog(); 但是我们不能用子类的引用指向父类对象 Dog obj3 = new Animal();//错 二、方法多态 创建本类对象时,调用的方法为本类方法。 创建子类对象时,调用的方法为子类重写的方法或者继承的方法。 1.在父类Animal中定义一个eat()方法,输出一个语句(动物有吃的能力); 在子类Dog中重写eat()方法,输出一个语句(狗是吃肉的); 那么我们在测试类main函数里面,如果obj1.eat() ,那么调用的是父类的方法. 若用obj2调用eat()方法,那么调用的是子类的方法. 2.还有一种情况,比如创建一个继承父类Animal的子类Cat ,但是Cat里并不重写继承的eat()方法. 然后,我们在测试类main函数里创建一个子类对象, Animal obj3 = new Cat(); 然后调用 obj3.eat(); 那么,结果调用的则是子类继承父类的方法. (输出结果:动物有吃的能力) 3.最后一种特殊情况,多态的特性是不能使用的. 若在子类添加一个独有的方法 public void

比较优雅地编码

早过忘川 提交于 2020-02-06 10:34:23
笔者认为做到比较优雅地编码,需遵从如下约束,排名分先后: 良好的命名 清晰的结构 不十分差劲的算法 下面逐一说明: 良好的命名 名不正,则言不顺,言不顺,则事不成 ── 孔子 孟子曰:“孔子说的对”。 命名很重要,随便一本逻辑学教材(如果读者有兴趣,此处推荐《逻辑学导论》)里都会有长篇大论来讨论命名的问题,我国古代在人才辈出的百家争鸣时期曾经出现过一个学派叫“名家”,专门讨论命名的问题,比如著名的“白马非马”、“离坚白”等,有空读读还是挺有趣的,比玩王者荣耀还有趣。笔者认为我国到目前为止出现了三个思想大解放时期:一,春秋战国时期的百家争鸣,可惜被秦皇的郡县制大一统所终结;二,民国时期,西方思想初涌,国人似惊雷轰顶,如梦方醒;三,当下,技术革命使得中央思想控制力度急剧下降,使得底层人民有了选择被谁控制思想的自由(请参考如今基于互联网的粉丝文化,圈子文化)。所以大家一定要好好写代码,才不负少年头呀。 回归主题,命名应该本着不怕长就怕不清楚的原则,尽量把一个类、方法、变量的含义交代清楚,实际上笔者比较喜欢OC的方法(消息)命名规则,比如: (void) buy:(NSString*)something from:(NSString*)store at:(NSDate*)time; 长,但是很清楚。下面详述命名: 接口的命名 接口的命名一般都是前缀 I 加上 名词 或 形容词 ,实际上

面向对象的六大原则

心不动则不痛 提交于 2020-02-06 06:50:50
正巧赶上当当200减100,就买了本《Android源码设计模式》 1,优化代码的第一步——单一职责原则SRP(Single Responsibility Principle)SRP   使代码尽可能减少耦合,增加可扩展性与灵活性。 个人理解就是:任务分工明确,每个类都有明确的方法,不要混淆在一起 2,使程序更稳定、更灵活——开闭原则OCP(Open Close Principle)       ————Java世界中最最基础的设计原则      软件中的对象(类、模块、函数)应该对扩展是开放的,而对于开放是封闭的,这就是开放—关闭原则。       我个人的理解就是: 程序一旦开发完成后,尽量不要对与原函数进行修改,如果要修改,可以通过继承这个class,通过重写来修改。而原来的类,也就变成了接口。   而在现实编码过程中,通过修改旧代码还是继承修改,都要视情况而定,不可迂腐。 3,构建扩展性更好的系统——里氏替换原则LSP()         面向对象的语言有三大特点:继承,封装,多态。    定义:简单来说就是,所有引用基类的地方必须能透明地使用其子类的对象。     也就是说,只要父类出现的地方,子类就可以出现,反之不成立。(抽象)    核心原理是抽象,而抽象又依赖于继承。 4,让项目拥有变化的能力——依赖倒置原则DIP(Dependent Inversion

菜菜读设计模式设计模式——设计原则:面向对象

我们两清 提交于 2020-02-06 01:24:24
1.面向对象语言(OOP) 面向对象语言最基本的概念就是类与对象,只有拥有这两个概念的语言才是面向对象语言 一般来说面向对象语言拥有四个特征:封装、继承、抽象、多态 但并不是必须具备这四种特性的语言才能成为面向对象语言,比如说 Go 语言,它没有继承的特性,但我们仍认为它是面向对象语言 2.封装、抽象、继承、多态 封装:类通过暴露有限的访问接口,授权外部仅能以类提供的函数来访问内部信息或数据。 实现封装的机制:访问权限控制 (public\protect\default\private) 同一个类 同一个包 不同包的子类 不同包的非子类 public √ √ √ √ protect √ √ √ default(默认空值) √ √ private √ 封装的意义:限制对类中属性的访问,可以避免属性被恶意修改,且防止修改逻辑散落在代码的各处,影响代码的可读性、可维护性;类通过有限的方法暴露必要的操作,能提高类的易用性,让调用者不必了解太多背后的业务细节。 抽象:借助编程语言提供的接口类或抽象类来隐藏方法的具体实现,让调用者只需要关心方法提供哪些功能,并不需要关心功能如何实现 实现抽象机制:interface 接口关键字和 abstract 抽象类关键字 抽象为类提供了具有共性的方法但不提供具体的实现方式。同样的,抽象也可以用函数来实现,调用者用函数的时候,并不需要研究函数内部的实现逻辑

【Java基础07】抽象类、接口

廉价感情. 提交于 2020-02-05 12:19:07
1 抽象类 1.1 抽象 abstract 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有什么样的属性和行为,并不关注这些行为的细节是什么。 1.2 抽象方法和抽象类 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。 抽象方法和抽象类的规则如下。 1.抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract 修饰符来修饰,抽象方法不能有方法体。 2.抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。 3.抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举) 5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。 4.含有抽象方法的类(包括直接定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义成抽象类。 定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体全部去掉,方法后增加分号。 定义抽象类只需在普通类上增加abstract修饰符即可。一个普通类(不包含抽象方法的类