抽象类

使用抽象类应该注意的一些地方

本小妞迷上赌 提交于 2020-01-23 01:06:53
什么样的类为抽象类: 1、类被abstract修饰的类为抽象类,抽象类中可以用抽象方法,也可以有非抽象的方法。 2、 类中 有抽象方法的时候,这个类一定是抽象类,但是接口也有抽象方法,但不是类。 3、继承父类时,如果子类不需要重写父类的抽象方法时,子类一定是抽象类。 1): 2): 3): 4)抽象类有构造函数,但是不能new对象 5)抽象类是类的模版,当作父类就是用来被继承的 6)abstract不能和final,private,static一块使用 来源: CSDN 作者: weixin_42689746 链接: https://blog.csdn.net/weixin_42689746/article/details/103949623

接口和抽象类的区别

*爱你&永不变心* 提交于 2020-01-22 17:59:50
我们先看下抽象类的由来,抽象类是将具有类似特点的事物相同部分进行抽取而来的,他的目的是提供继承: 例如: 程序员: 属性:姓名、薪水 方法:工作 经理: 属性:姓名、薪水、奖金 方法:工作 程序员和经理有共同的属性:姓名,薪水,有共同的方法工作,将他们这些共性的部分抽取出来就可以形成抽象类 员工。在这个例子中员工本身是没有意义的他的意义就在于可以作为程序员和经理的父类,提供继承。而员工这个类我们可以把它定义为抽象类。 abstract class Employee{ public String name; public double pay; public abstract void work(); } 程序员继承员工类: class Programmer extends Employee{ public void work(){ System.out.println("codeing...."); } } 经理也继承员工类: class Manage extends Employee{ public int bouns; public void work(){ System.out.println("manage"); } } 关于抽象类有一些需要注意的地方: 有抽象方法的类必须是抽象类。 抽象类中可以有非抽象方法 继承了抽象类的类必须实现该抽象类的所有抽象方法

[转帖]Java面试通关要点汇总集

青春壹個敷衍的年華 提交于 2020-01-22 16:33:50
Java面试通关要点汇总集 https://www.zybuluo.com/Yano/note/1102942 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自定义注解的场景及实现 HTTP 请求的 GET 与 POST 方式的区别 session 与 cookie 区别 session 分布式处理 JDBC 流程 MVC 设计思想 equals 与 == 的区别 面向对象的特征 抽象:数据抽象、逻辑抽象 封装:把过程和数据包围起来 继承:鼓励类的重用 多态:允许将子类类型赋值给父类类型的引用,将类型泛化 final, finally, finalize 的区别 final: - 变量:不可修改 - 对象:引用不可修改 - 方法:不可被重写 - 类:不可被继承 finally:异常处理的关键字,无论是否抛出异常,finally 块都会被执行 finalize:finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 protected void finalize () throws Throwable { } 大致描述一下finalize流程:当对象变成(GC

对java学习过程的见解

依然范特西╮ 提交于 2020-01-22 16:28:57
对java学习过程的见解 从学习java以来,见过做过各种各样的项目,在和一位老师交流java学习时,有了更深层的java编码感触对于java编程我们大概会经过以下几个阶段: 面向对象 面向切面 面向抽象 面向接口 面向对象 面向对象 一开始当然初入Java坑时理所应当觉得是面向对象的,不管是书本上教学还是自己实际创建类出来的类都会不断地进行类似以下代码的各种处理 String id = "Hello World" ; String a = id . subString ( 0 , 1 ) ; 我们当然会认为代码中的id,a等就是对象,这是对于一个类而言,也是对java最基本的认识 在学习完SE阶段熟悉各种基本操作后大概会认为我们编码的类就是一个对象 面向切面,抽象,接口 进入开发之后,随着代码量的提高,就会开始对面向切面,面向抽象,面向接口更加了解 通常开发中后端常用模块分为controller service dao pojo。。。这时面向切面编程的思想就初具雏形 我们可能最开始在开发中编写controller层调用service层进行操作,在这时我们就会发现后端的service层其实和工具类一样,只需要我们进行调用而不关心其处理流程 但service层的开发也是逐渐发展过来。在我编写代码时会首先定义service接口,并定义其实现类impl对其实现

Java面试题(白)QuickHit

吃可爱长大的小学妹 提交于 2020-01-22 09:19:47
1.抽象类的特点? 1)抽象方法和抽象类都必须被abstract关键字修饰。 2)抽象方法一定在抽象类中。 3) 抽象类不可以用new 创建和实例化对象。因为抽象类本身 4) 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。 2.abstract 关键字,和哪些关键字不能共存? final:被final修饰的类不能有子类(不能被继承)。而被abstract修饰的类一定是一个父类(一定要被继承) private: 抽象类中私有的抽象方法不被子类所知,就无法被复写;而抽象方法出现的就是需要被复写。 static:如果static 可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。 3.接口的特点? 1)接口不可实例化,可结合多态进行使用(接口 对象=new 对象()) 2)接口里的成员属性全部是以 public(公开)、static(静态)、final(最终) 修饰符修饰 3) 接口里的成员方法全部是以 public(公开)、abstract(抽象) 修饰符修饰 4)接口里不能包含普通方法 5)子类继承接口必须实现接口里的所有成员方法,除非子类也是抽象类 4.面向接口编程的好处? 1)更加抽象,更加面向对象 2)提高编程的灵活性 3)实现高内聚、低耦合,提高可维护性,降低系统维护成本。 5.抽象类和接口的区别? 抽象类

详解Java面向对象

浪子不回头ぞ 提交于 2020-01-22 08:58:04
java面向对象 面向对象由 OOA分析 OOD设计 (用UML来记录描述) OOP编程有机组成 三种基本特征 封装 将对象的实现细节隐藏起来 通过一些公用方法来暴露该对象的功能 提高类的内聚 降低对象的耦合 继承 实现软件复用 子类继承父类之后 子类作为一种特殊的父类 直接获得父类的属性和方法 多态 子类对象可以直接赋值给父类变量 但运行时依然表现出子类的行为特征 同一个类型对象在执行同一个方法表现出多种行为特征 ps:基于对象的语言如 javascript 无法通过继承产生新的对象 因而无多态特征 不能称为面向对象编程 类与对象 修饰符 权限 public default 当前包 (默认) protected 子类 (不能修饰类) private 当前类(不能修饰类) 非权限 abstract 抽象 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。 一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。 final 类不可继承 父类中的 final 方法可以被子类继承,但是不能被子类重写。 static 静态 面向对象程序单位是类 面向过程程序单位是函数 程序的最小单位是类 类生成系统中多个对象 对象 映射成现实中的事物 类定义=成员变量+方法 构造方法无返回值类型 返回的是当前类的实例(隐式) Person p = new

Java基础方面

这一生的挚爱 提交于 2020-01-21 17:42:58
Java基础方面: 1 、作用域 public,private,protected, 以及不写时的区别 答: 区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2 、 Anonymous Inner Class ( 匿名内部类 ) 是否可以 extends( 继承 ) 其它类,是否可以 implements( 实现 )interface( 接口 ) 答: 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3 、 Static Nested Class 和 Inner Class 的不同 答: Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4 、 & 和 && 的区别 答: &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5 、

【C++】多态类面试题

浪子不回头ぞ 提交于 2020-01-21 14:02:40
多态类面试题 什么是多态? 答: 不同的对象完成相同的事件(具有相同的函数),产生不同的结果(函数内部实现不同)。 什么是重载、重写、重定义? 作用域 函数名、参数、返回值的要求 其它的要求 重载 两个函数在同一作用域 函数名、参数相同 重写(覆盖) 两个函数分别在基类和派生类的作用域 函数名、参数、返回值都相同 两个函数必须是虚函数 重定义(隐藏) 两个函数分别在基类和派生类的作用域 函数名相同 基类和派生类的同名函数不构成重写就是重定义 多态的实现原理? 答: 通过虚基表实现。 构造函数可以是虚函数吗? 答:不可以。因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的。 析构函数可以是虚函数吗? 答:可以。但是在某一种特定的条件下,必须将析构函数定义为虚函数。(见链接)。 虚函数可不可以定义成static类型的函数? 答:不可以。虚函数的地址要存到虚表中去,static不用对象就可以调用,那么没有对象,就没有虚表指针,就找不到虚表了。没有虚表就肯定不能实现多态。没有对象,就没有this指针,所以虚函数就是为了实现出多态,定义成static静态函数就找不到虚表,实现不了多态。 内联函数不能是虚函数 正确 虚函数可以定义成内联函数吗? 答:不可以。内联函数没有地址,每次用到内联函数的时候,都是在调用的地方进行了展开,普通函数有地址,调用的时候汇编代码中就call(调用的意思

C#.NET里面抽象类和接口有什么区别

。_饼干妹妹 提交于 2020-01-21 13:59:28
1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2(int para1); void Method3(string para2,string para3); } 那么,接口的本质是什么呢?或者说接口存在的意义是什么。我认为可以从以下两个视角考虑: 1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 例如,在自然界中,人都能吃饭,即“如果你是人,则必须能吃饭”。那么模拟到计算机程序中,就应该有一个IPerson(习惯上,接口名由“I”开头)接口,并有一个方法叫Eat(),然后我们规定,每一个表示“人”的类,必须实现IPerson接口,这就模拟了自然界“如果你是人,则必须能吃饭”这条规则。 从这里,我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一

如何在抽象类中注入bean

一个人想着一个人 提交于 2020-01-20 19:04:48
抽象类是无法实例化的,因此无法使用@Service等这种注解直接将抽象类交给ioc容器管理,但是项目中往往需要有很多子类公用抽象父类的模板方法,那么怎么实现呢? 错误演示 1、抽象类 @Component public abstract class BaseService { @Autowired Dao dao; } 2、子类 @Component public class MyService extends BaseService{ public void print(){ //运行时为null System.out.print(dao.toString()); } } 在我们实例化子类对象的时候,抽象父类不能实例化,因为spring注入的是实例对象,而不是类,所以spring不会将dao自动装配注入到一个实例中。 解决方法 一、使用ApplicationContextAware 1、工程图 jar包只需要引入spring-context即可。 2、ApplicationContextUtil package spring.chapter1.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import