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());
    }
}