Java千百问_05面向对象(006)_is-a,has-a,like-a是什么

点击进入_很多其它_Java千百问

1、is-a,has-a,like-a是什么

在面向对象设计的领域里,有若干种设计思路,主要有例如以下三种:

is-a、has-a、like-a

java中在类、接口、抽象类中有非常多体现。

了解java看这里:什么是Java

了解类和对象看这里:类、对象究竟有什么秘密

了解接口和抽象类看这里:接口和抽象类有什么差别

2、is-a是什么

is-a。顾名思义,是一个。代表继承关系。

假设A is-a B,那么B就是A的父类。

一个类全然包括还有一个类的全部属性及行为。

比如PC机是计算机,工作站也是计算机,PC机和工作站是两种不同类型的计算机。但都继承了计算机的共同特性。因此在用Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。

了解很多其它继承看这里:java类的继承有什么意义

3、has-a是什么

has-a,顾名思义。有一个。代表从属关系。

假设A has a B,那么B就是A的组成部分。

同一种类的对象,通过它们的属性的不同值来差别。

比如一台PC机的操作系统是Windows,还有一台PC机的操作系统是Linux。

操作系统是PC机的一个成员变量,依据这一成员变量的不同值,能够区分不同的PC机对象。

4、 like-a是什么

like-a。顾名思义。像一个,代表组合关系。

假设A like a B,那么B就是A的接口。

新类型有老类型的接口,但还包括其它函数,所以不能说它们全然同样。

比如一台手机能够说是一个微型计算机,可是手机的通讯功能显然不是计算机具备的行为,所以手机继承了计算机的特性,同一时候须要实现通讯功能。而通讯功能须要作为单独接口。而不是计算机的行为。

5、is-a,has-a,like-a怎样应用

假设你确定两件对象之间是is-a的关系,那么此时你应该使用继承。比方菱形、圆形和方形都是形状的一种。那么他们都应该从形状类继承。

假设你确定两件对象之间是has-a的关系,那么此时你应该使用聚合。比方电脑是由显示器、CPU、硬盘等组成的。那么你应该把显示器、CPU、硬盘这些类聚合成电脑类。

假设你确定两件对象之间是like-a的关系,那么此时你应该使用组合。比方空调继承于制冷机,但它同一时候有加热功能。那么你应该把让空调继承制冷机类,并实现加热接口。

时间: 2024-08-29 15:33:05

Java千百问_05面向对象(006)_is-a,has-a,like-a是什么的相关文章

Java千百问_05面向对象(005)_接口和抽象类有什么差别

点击进入_很多其它_Java千百问 1.接口和抽象类有什么差别 在Java语言中.抽象类abstract class和接口interface是抽象定义的两种机制. 正是因为这两种机制的存在,才赋予了Java强大的面向对象能力.抽象类abstract class和接口interface在对于抽象定义方面具有非常大的类似性.甚至能够相互替换.因此非常多开发人员在进行抽象定义时对二者的选择显得比較任意.事实上,两者之间还是有非常大的差别.对于它们的选择能反映出对问题本质的理解.对设计意图的理解. 了解

Java千百问_05面向对象(014)_如何获取范型的类Class

点击进入_更多_Java千百问 1.如何获取范型的类Class java中,无法获取范型的类型,例如: public class Box<T> { public static void main(String[] args) { System.out.printf(T);//编译错误 } } 其实,由于java是强类型语言,在编译时我们并不知道T是什么具体类型,只有在编译后,不同场景指定之后才会知道,所以在编译前是无法获取T的类型.如果想获取T的类型,可以在泛型类中声明一个对象,通过对象获取当

Java千百问_05面向对象(008)_java中覆盖是什么

点击进入_很多其它_Java千百问 1.什么是覆盖 在java中,覆盖是针对继承才有的概念,某一个子类须要某些方法或属性,但又不想使用父类中的同名的方法或属性,就须要使用覆盖. 直白的来说,就是在子类中编写与父类同名.同參数.同返回值的方法,或同名.同类型的属性.子类对象调用该方法/属性时.运行的是子类的方法.而不会运行父类的方法(除非在方法第一行写super();会先运行父类方法.再继续运行子类代码. ) 了解类的构造函数看这里:类.对象究竟有什么秘密 了解很多其它继承看这里:java类的继承

Java千百问_08JDK详解(006)_jdk用户界面类库都有什么

点击进入_更多_Java千百问 1.jdk用户界面类库都有什么 了解java核心框架看这里:java核心框架是什么样的 1. 输入法框架(Input Method Framework) 输入法框架包括文本编辑组件与文本输入.文本输入是软件组件,使得用户输入文本而不是简单的在键盘上打字.它们通常用于输入日本.中国或韩国的语言,输入比键盘按键多出数百倍的文本.当然,框架还支持其他语言,以及完全不同的输入机制,如手写和语音识别. 了解更多输入法框架看这里:[java输入法框架是什么][3] 可接入性库

Java千百问_02基本使用(006)_eclipse如何保存时格式化

点击进入_更多_Java千百问 1.eclipse如何打开保存时格式化 我们都知道,为了让代码可读性更高,eclipse提供了代码格式化的功能,一般指定了对应format文件(eclipse会默认自带)后,通过快捷键Ctrl+Shift+F来进行格式化. 然而,很多时候并不方便,而且在修改完代码后容易忘记.其实还有一种更好的方法:保存时自动格式化.每次保存都会自动格式化,十分方便. 方法如下: 具体方法:windows–>Preferences–>Java –> Editor–>S

Java千百问_07JVM架构(006)_java堆和栈有什么区别

点击进入_更多_Java千百问 1.java堆和栈有什么区别 了解jvm内存管理看这里:jvm是如何管理内存的 在<jvm是如何管理内存的>这篇文章中,已经对PC寄存器(计数器 pc registers).方法区(method area).本地方法栈(native method stacks).栈(stacks).堆(heap)内存区域做了介绍,其中栈(stacks).堆(heap)是java内存管理中非常重要的两个部分,具体区别如下: 2.基本数据类型储存在栈中吗 基本数据类型由于长度固定,

Java千百问_01基本概念(006)_线程和进程有什么区别

点击进入_更多_Java千百问 1.进程是什么 进程(process)是具有一定独立功能的程序,操作系统利用进程把工作划分为一些功能单元. 进程是进行资源分配和调度的一个独立单位.它还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问. 一个应用程序(application)是由一个或多个相互协作的进程组成的.例如,Visual Studio开发环境就是利用一个进程编辑源文件,并利用另一个进程完成编译工作的应用程序. 2.线程是什么 线程(thread)是进程中所包含的一个或多个执行单元

Java千百问_01基本概念(001)_什么是Java

点击进入_更多_Java千百问 1.什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:[Java都有那些版本][3] 开发人员一般通过IDE(Eclipse.NetBeans.JBuilder等)编写.编译Java代码(在远古没有IDE的时代,都是用文本编辑器编写,使用javac编译),在这个过程中,会使用到Jdk与第三方Jar包(Jar包即一组编译后的类打成的压缩包

Java千百问_08JDK详解(001)_java核心框架是什么样的

点击进入_更多_Java千百问 1.java核心框架是什么样的 我们知道,我们所说的java包含jdk.jre.jvm等(jdk包含jre,jre包含jvm),下面是一个Java SE的模型图(本文部分摘自Oracle官方文档,非常权威): 了解jdk.jre.jvm看这里:什么是Java 了解Java SE看这里:Java都有那些版本 2.jdk都包含哪些组件 jdk主要包含Java Language语言(语法).Tools(编译器.调试器等).Jre等,具体如下: Java Language