类的重用之继承(Java)

封装是面向对象基石,类的重用就是面向对象的核心。

重用方式一:继承

本质:继承的出发点是若干类存在的相似点,共享相同的方法和属性,这样一来,相似处能够提取出来重用,不必重复编写代码。

实现:继承是在一个父类的基础上扩展新的功能实现的,父类定义了公共的属性和方法,而其子类自动拥有了父类的所有功能,在此基础上,又可以增添自己特有的新的属性和方法进行扩展。

Java的类的继承的特点:

1.Object是所有类的祖先,所以Java中创建一个新类时,总是在继承。

2.Java只支持单继承,每个子类只能有一个直接付磊,不允许有两个以上的父类,这使得Java的继承方式很直接,代码简洁,结构清晰。

Java的类的继承的缺点:

由于继承中父类和子类之间的高度紧耦合性,一旦父类的数据成员或方法有变化,其子类也要做相应的更改。


类的继承举例:

比如以电子商品为例,Product是一个父类,属性有产品ID,产品名字,产品种类和产品价格,还有获取这些属性的值的方法。实现代码如下:

public class Product {
    protected int ID;
    protected String name;
    protected String categories;
    protected double ProductPrice;
    int getID()
    {
        return ID;
    }
    String getName(){
        return name;
    }
    String getCategories(){
        return categories;
    }
    double getProductPrice(){
        return ProductPrice;
    }
}

继承的关键字是extends,如下面的computer继承Product的例子。computer在Product的基础上增添了自己的内存和处理器的属性。

public class computer extends Product {
    protected  int memory;
    protected  String ProssesorName;

    int getMemory(){
        return memory;
    }
    String getProssesorName(){
        return  ProssesorName;
    }

}

还有Laptop对Computer的继承

public class computer extends Product {
    protected  int memory;
    protected  String ProssesorName;

    int getMemory(){
        return memory;
    }
    String getProssesorName(){
        return  ProssesorName;
    }

}

测试:

public class test {
    public static void main(String[] args) {
        computer apple = new computer();
        apple.ID = 124;
        apple.name = "MacBook";
        apple.categories = "Laptop";
        apple.ProductPrice=30000;
        System.out.println(apple.getName());
        System.out.println(apple.getCategories());
        System.out.println(apple.getProductPrice());

        Laptop mac = new Laptop();
        mac.name = "mac";
        mac.thickness=13.22;
        mac.weight=30;
        mac.memory=300;
        System.out.println(mac.name);
        System.out.println(mac.getThickness());
        System.out.println(mac.getWeight());
        System.out.println(mac.memory);

    }
}

结果:


需要说明的是这几个父类的数据成员皆定义为protected,protected的访问权限范围是本类和子类,继而即使子类和父类不在同一个包里,子类的方法仍然能访问到从父类继承而来的protected成员,然而子类的对象就不可以,因为子类的对象并不属于子类

参考资料:《Java语言程序设计面向对象的设计思想与实践》

猜你喜欢

转载自blog.csdn.net/maxinezhou/article/details/80545254