文档章节

再探java基础——对面向对象的理解(2)

自由的角马
 自由的角马
发布于 2015/01/10 13:55
字数 1849
阅读 11
收藏 0

对象、类和抽象类的区别

对象是一个具体的事物,类是对具有相同属性和行为的一组对象的抽象,对象是类的一个一个人的具体实例;抽象类是一种特殊的类,是对类的进一步抽象,抽象类不能被实例化。

类、抽象类和接口的异同

部分内容借鉴以下博文:http://www.cnblogs.com/qiuxiaoju/p/3174068.html

在面试可能经常被问到,接口有什么作用?相对于类而言,为何需要用类实现接口,接口和抽象类的区别等等诸如此类的问题。如果不仔细思考和总结一下这知识,还真不知道怎么回答。

Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。

相同点:

1.都是抽象类型抽象类接口都是对类进行抽象;

2.其中的抽象方法都必须被具体类实现

3.都不可以被实例化,如果要非要通过new创建他们的实例,都需要通过匿名内部类的方式

4.都可以定义公共的(public)static属性和方法;如:

public int id = 5;

public final String name = "interface";

public static int age = 22;

public static final int weight = 55;

int i = 0;

不同点:

定义的角度:

1.定义抽象类用abstract class,定义接口用interface

继承的角度:

2.一个具体的实现类只能继承一个父类,但可以实现多个接口;

属性和方法的角度:

3.抽象类可以定义privateprotected属性和方法,而接口只能定义publicdefault(即默认的没有设定访问权限)的属性和方法;

4.Java抽象类可以提供某些方法的部分实现,而Java接口不可以

5.抽象类可以有抽象方法和非抽象方法,子类可以有选择的实现抽象类中的非抽象方法,而实现类必须实现接口中的所有方法

构造方法

6.接口不可以有构造方法,抽象类可以有构造方法

设计理念不同

7.其实子类和抽象类的的关系表示的是”is-a”关系(塑料碗和瓷碗都是碗),是一种律属关系,子类属于父类,因此一个类只能继承继承一个类;子类和接口的关系表示的是“has-a”关系(智能手机继承自手机,同时实现了闹钟、MP3等各种功能),实现类拥有这个接口的特征也可以拥有另外一个借口的特征,因此一个类可以实现多个接口。

概况地说,接口是模块之间的协议,一些模块用于实现某些协议的具体动作,另外一些模块只针对接口编程,这样实现低耦合。
抽象类主要是用于继承设计的,主要用于模板设计!

 

经典的设计模式:缺省/默认适配模式(Default Adapter)

声明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类。哈,这下两个的最大优点都能发挥到极至了。这个模式就是缺省适配模式

Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。

继承

1、方法(函数)重写(overwrite)要注意的机几点:
  1),重写方法(函数)必须和被重写方法具有相同的方法名称、参数列表和返回类型;
  2),重写的时候要从父类的函数声明中拷贝函数的声明(即函数名设参数的类型和个数)。
  3),重写方法不能使用比被重写方法跟严格的访问权限。(为避免名称出错,重写时必须从基类中copy函数的声明)
2super关键字指向当前类的父类。

3、构造方法:

a,子类的构造的过程必须调用其基类的构造方法;

b,子类可以在自己的构造方法中使用superargument_list参数列表)调用基类的构造方法;即使用this(argument_list_)调用本类的另外的构造方法,如果调用super,必须写在子类构造方法的第一行。

 c,如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类无参数的构造方法; 

d,如果子类的构造方法中没有显示地调用基类的构造方法,而基类中又没有无参数的构造方法,则编译出错。4Object类是java所有类的根基类,如果在类的声明中未使用extends指明其基类,则默认为object类。
5对象转型:

a,一个基类的引用类型对象可以指向其子类的对象;

b,一个基类的引用的不可以访问子类对象新增加的成员(属性和方法);

c,可以使用引用变量instanceof类名来判断该引用变量所指向的对象该类或该类的子类;

d,子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
6动态绑定是指在执行期间(而非在编译期间)判定所引用对象的实际类型,根据实际的类型调用相应的方法。
   要符合的条件:a,要有继承;b,要有重写;c,父类引用指向子类对象。
7抽象类;
   a,用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,这个方法叫做抽象方法;
   b,含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写;
   c,抽象类不能被实例化;
   d,抽象方法只需声明,而不需实现。
8final关键字(类似于C++中的const)
   afinal的变量的值不能被改变;1),final的成员变量; 2final的局部变量;
   bfinal的方法不能被重写;
   cfinal的类不能被继承。

 

继承和组合的关系

上次阿里面试的时候问到继承和组合的关,什么时候要用组合,什么时候要用继承。真后悔当初没有准备,不然就可以很容易地回答,现在想起来,当时回答的真是烂的不能再烂

继承和组合的关系主要是要从理念上进行区分,继承是一种从属关系,是子由你来的一种关系;而组合是一种包含关系,是整体与部分的关系。

假设有两个类AB,当AB和关系是B is A,用继承:B extends A;当AB和关系是B has A时,用组合,即B中含有A的实例化对象。

本文转载自:http://blog.csdn.net/luoweifu/article/details/12178763

自由的角马
粉丝 1
博文 269
码字总数 0
作品 0
文山
私信 提问
java 7 入门书籍

一、Java从入门到精通 《Java从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识。 《Java从入门到精通(第3版...

modernizr
2014/05/15
7.6K
9
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
2018/11/15
2.4K
0
零基础学Java10系列三:Java高级编程​​​​​​​

更多关于Java高级编程内容链接:零基础学Java10系列三:Java高级编程——阿里云大学 多线程: 生产者和消费者指的是两个不同的线程类对象,两个进程公用一个公共的固定大小缓冲区。其中之一的...

阿里云大学云百科
04/26
35
0
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
Java 程序员的错

编者注:可以喷语言,但不要搞人身攻击! BTW:我也是一名 Java 程序员,哈哈! Java程序员是有问题的。我使用Java编程已经有10多年的历史。同时,我还有过大量的使用其它语言开发的经历,比...

oschina
2014/07/29
8.6K
92

没有更多内容

加载失败,请刷新页面

加载更多

sync 包讲解

sync.Once Once 的作用是多次调用但只执行一次,Once 只有一个方法,Once.Do(),向 Do 传入一个函数,这个函数在第一次执行 Once.Do() 的时候会被调用,以后再执行 Once.Do() 将没有任何动作...

李琼涛
19分钟前
3
0
java中的byte占一字节或4字节

https://www.jianshu.com/p/2f663dc820d0

南桥北木
33分钟前
4
0
Cassandra 常用命令

Linux控制台命令 #进入Cassandra的安装目录 cd /home/db/cassandra/cassandra #进入Cassandra 无密码 ./bin/cqlsh localhost(IP)有密码 ./bin/cqlsh localhost(IP)-u 用户名 #显示所...

最菜最菜之小菜鸟
39分钟前
4
0
自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
47分钟前
4
0
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系统资源...

分布式系统架构
54分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部