1.信息的封装
封装指将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预)、弱耦合(提供尽可能少的调用给外部)。Java中通过将数据封装、属性声明为私有(private)和提供一个或多个公开的(public)方法实现对该属性的操作。
2.类的继承(Inheritance)
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类 { }
class 子类 extends 父类 { }
(1)继承的特性
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
(2)关键字
继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。
extends关键字:在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
implements关键字:使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
final关键字:final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
class Animal{
private int weight;
public int getWeight(){
return weight;
}
public void setWeight(int w){
weight=w;
}
}
class Dog extends Animal{
public void bark(){
System.out.println("wang!!!");
}
}
public class 继承例子 {
public static void main(String[] args) {
Dog d=new Dog();
d.setWeight(50);
System.out.println("my dog's weight is "+d.getWeight());
d.bark();
}
}
3.组合和聚合(Composite/Aggregation)
(1)组合:
如果需要复用一个类,除了把这个类当成基类(父类)来继承外,还可以把该类当作另一个类的组合成分,从而允许新类直接复用该类的public方法,不管是继承还是组合,都允许在新类中直接复用旧类的方法。组合是直接把旧类对象作为新类的属性嵌入,用于实现新类的功能,通常需要在新类里使用private修饰符嵌入该类对象。“我生他也生”。
(2)聚合:
在聚合关系中,代表部分事物的可以属于多个聚合对象,可以为多个聚合对象共享,而且可以随时改变它所从属的聚合对象。代表部分事物的对象与代表聚合事物。对象的生存期无关,一旦删除了它的一个聚合对象,不一定也就随即删除代表部分事物的对象.在组合关系中,代表整体事物的对象负责创建和删除代表部分事物的对象,代表部分事物只属于一个组合对象。一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象。
(3)区别:
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。现实生活中:人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
class Person{
private Hand hand;
private Computer computer;
Person(){//放在构造器里,实现“我生他也生”——组合
hand=new Hand();
}
public Hand getHand() {
return hand;
}
public void setHand(Hand hand) {
this.hand = hand;
}
//在构造器外,只有调用相关语句才会出生——聚合
public Computer getComputer() {
return computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
}
class Hand{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Computer{
private int Age;
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
}
public class 组合聚合例子 {
public static void main(String[] args) {
//组合
Person p=new Person();
p.getHand().setName("lefthand");
System.out.println(p.getHand().getName());
//聚合
Person p1=new Person();
Computer com=new Computer();
com.setAge(10);
p1.setComputer(com);
System.out.println(p1.getComputer().getAge());
}
}