java中什么叫组合?java 聚合和组合的区别
各位老铁们,大家好,今天由我来为大家分享java中什么叫组合,以及java 聚合和组合的区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
谈谈Java中的继承与组合
继承和组合的概念
在新类里简单地创建原有类的对象我们把这种方法叫作组合因为新类由现有类的对象合并而成我们只是简单地重复利用代码的功能而不是采用它的形式
第二种方法是创建一个新类将其作为现有类的一个类型我们可以原样采取现有类的形式并在其中加入新代码同时不会对现有的类产生影响这种魔术般的行为叫作继承(Inheritance)涉及的大多数工作都是由编译器完成的对于面向对象的程序设计继承是最重要的基础概念之一对于组合和继承这两种方法大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)
组合也就是一个类的对象是另外一个类的成员一般的程序都有组合的意味只不过是基本数据类型是成员变量下面请看具体的例子
class Head
{
Head(){
System out println( head);
}
}
class Body
{
Body(){
System out println( body);
}
}
class Person()
{
Head h=null;
Body b=null;
Person()//人是由头和身体组成的 Head和Body的对象是Person的一部分
{
h=new Head();
b=new Body();
}
}
继承作为面向对象的三个重要特性的一个方面在面向对象的领域有着及其重要的作用好像没听说哪个面向对象的语言不支持继承
class Person
{
private String name=null;
private int age=;
public Person(String n int a)
{
name=n;
age=a;
}
int getAge()
{
return age;
}
String getName()
{
return name;
}
void getDescription()
{
System out println( name:+name+ \t+ age:+age);
}
}
class Student extends Person
{
private String studno=null;
public Student(String n String no int a)
{
super(n a);
studno=no;
}
}
说明:Student类中有三个成员变量name age studno和一个方法getDescription();
注意:子类继承了父类的所有变量和函数只是子类不能访问父类的private类型的变量和函数其实privae类型的变量还是继承到子类中的
无论还是继承都允许我们将子对象置于自己的新类中大家或许会奇怪两者间的差异以及到底该如何选择
如果想利用新类内部一个现有类的特性而不想使用它的接口通常应选择组合也就是说我们可嵌入一个对象使自己能用它实现新类的特性但新类的用户会看到我们已定义的接口而不是来自嵌入对象的接口考虑到这种效果我们需在新类里嵌入现有类的private对象
有些时候我们想让类用户直接访问新类的组合也就是说需要将成员对象的属性变为public成员对象会将自身隐藏起来所以这是一种安全的做法而且在用户知道我们准备合成一系列组件时接口就更容易理解 car(汽车)对象便是一个很好的例子
class Engine{
public void start(){}
public void rev(){}
public void stop(){}
}
class Wheel{
public void inflate(int psi){}
}
class Window{
public void rollup(){}
public void rolldown(){}
}
class Door{
public Window window= new Window();
public void open(){}
public void close(){}
}
public class Car{
public Engine engine= new Engine();
public Wheel[] wheel= new Wheel[ ];
public Door left= new Door()
right= new Door();// door
Car(){
for(int i=; i<; i++)
wheel[i]= new Wheel();
}
public static void main(String[] args){
Car car= new Car();
car left window rollup();
car wheel[ ] inflate();
}
}///:~
由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分)所以有助于客户程序员理解如何使用类而且类创建者的编程复杂程度也会大幅度降低
如选择继承就需要取得一个现成的类并制作它的一个特殊版本通常这意味着我们准备使用一个常规用途的类并根据特定的需求对其进行定制只需稍加想象就知道自己不能用一个车辆对象来组合一辆汽车——汽车并不包含车辆相反它属于车辆的一种类别属于关系是用继承来表达的而包含关系是用组合来表达的
protected
现在我们已理解了继承的概念 protected这个关键字最后终于有了意义在理想情况下 private成员随时都是私有的任何人不得访问但在实际应用中经常想把某些东西深深地藏起来但同时允许访问衍生类的成员 protected关键字可帮助我们做到这一点它的意思是它本身是私有的但可由从这个类继承的任何东西或者同一个包内的其他任何东西访问也就是说 Java中的protected会成为进入友好状态
我们采取的最好的做法是保持成员的private状态——无论如何都应保留对基础的实施细节进行修改的权利在这一前提下可通过protected方法允许类的继承者进行受到控制的访问
import java util*;
class Villain{
private int i;
protected int read(){ return i;}
protected void set(int ii){ i= ii;}
public Villain(int ii){ i= ii;}
public int value(int m){ return m*i;}
}
public class Orc extends Villain{
private int j;
public Orc(int jj){ super(jj); j= jj;}
public void change(int x){ set(x);}
}///:~
可以看到 change()拥有对set()的访问权限因为它的属性是protected(受到保护的)
再论合成与继承
lishixinzhi/Article/program/Java/hx/201311/26635java中String[][] 是什么东西string[]又是什么东西
String[][]是二维数组。例如:String[][]str=newString[4][4],这是创建了一个有4行4列元素的数组。
String[]代表一维数组。例如:String[]str=newString[4],这个创建一个有4个元素的数组。
String[]代表格式为String数组;如str[1] str[2]等。String[][]代表多维数组了.[][],可以理解为几行几列。
String是编程语言中的字符串,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。
扩展资料:
String的主要功能:
String类提供的成员执行以下操作:比较 String对象;返回 String对象内字符或字符串的索引;复制 String对象的值;分隔字符串或组合字符串;修改字符串的值;将数字、日期和时间或枚举值的格式设置为字符串;对字符串进行规范化。
使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith和 StartsWith方法进行比较。
使用 IndexOf、IndexOfAny、LastIndexOf和 LastIndexOfAny方法可获取字符串中子字符串或 Unicode字符的索引。
使用 Copy和 CopyTo可将字符串或子字符串复制到另一个字符串或 Char类型的数组。
使用 Substring和 Split方法可通过原始字符串的组成部分创建一个或多个新字符串;使用 Concat和 Join方法可通过一个或多个子字符串创建新字符串。
使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd和 TrimStart可修改字符串的全部或部分。
使用 ToLower、ToLowerInvariant、ToUpper和 ToUpperInvariant方法可更改字符串中 Unicode字符的大小写。
使用 Length属性可获取字符串中 Char对象的数量;使用 Chars属性可访问字符串中实际的 Char对象。
使用 IsNormalized方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize方法可创建规范化为特定范式的字符串。
参考资料:百度百科-string
java 聚合和组合的区别
组合:部分与整体是与生俱来的,部分的存在依赖于整体。比如人与人的某个器官,人一出生,器官就在,人死亡,器官也就没了意义。
聚合:你与你的电脑(或者其它物品),电脑是属于你的吧,但是你是一出生就拥有了电脑吗,电脑是某个厂商生产出来的,然后你买过来才成为了你的一部分。你死了以后,电脑也可以送给别人继续用啊!这就不叫做其存亡了,所以这是聚合。
这个是结合我之前看过的设计模式所想到的,如果你了解过设计模式,则会更容易明白我说的是什么了,比如有一种设计模式叫做责任链模式,责任链中的处理者往往是先创建出来,然后再把引用传到另一个责任处理对象作为责任接班人,这就用到了聚合的思想吧。
另外,《thinking inJava》里面是这样说的,“composing a new class from existing classes, this concept is called composition(if the composition happens dynamically, it's usually called aggregation)”。
意思是通过现在的类组合成一个新的类,叫做组合,如果这种组合是动态的,则叫聚合。如何理解”动态“,也就是可以随时加进来也可以随时删除,拿上面的人与电脑的例子来说,电脑可以随时扔掉,也可以随时加进来,人的生命不会受到威胁,但是人如果少了某个器官,则会危及到生命了!其实现实中的例子与Java中的概念还是有一点出入,类比只能是接近真相。
关于java中什么叫组合到此分享完毕,希望能帮助到您。