封装是面向对象基石,类的重用就是面向对象的核心。
重用方式一:继承
本质:继承的出发点是若干类存在的相似点,共享相同的方法和属性,这样一来,相似处能够提取出来重用,不必重复编写代码。
实现:继承是在一个父类的基础上扩展新的功能实现的,父类定义了公共的属性和方法,而其子类自动拥有了父类的所有功能,在此基础上,又可以增添自己特有的新的属性和方法进行扩展。
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语言程序设计面向对象的设计思想与实践》