Java是面向对象的编程语言,继承、多态、封装是面向对象的3大特征。
1、继承extends
class B extends A{},B可以使用A中的成员变量和成员方法。节约编程时间,提高软件可维护性、可扩展性。
继承可以理解为现实世界中的一种is-a关系,如BMW是一种车,而车又是一种交通工具。通过继承机制在现有类的基础上去定义一个新的类,并在原有类的基础上去添加方法、变量等定义一个新的类。
example
package Nine;
public class Car {
private String color = "Black";
public float speed = 90;
public int level;
public void setColor(String color){
this.color = color;
}
public String getColor(){
return color;
}
public void gear(int num){
level = num;
speed = 10 * level;
}
public void drive(){
System.out.println("The color of the Car is "+color);
System.out.println("The speed of the Car is "+speed);
System.out.println("The level of the Car is "+level);
}
}
package Nine;
public class SaloonCar extends Car {
public String style1 = "Saloon";
public double oil = Math.random();
//增加新的方法
public void style(){
System.out.println("The style is "+style1);
}
//增加方法
public void drive(){
if(oil>0){
super.drive();//使用父类的成员方法
}
else{
System.out.println("There is no oil");
}
}
}
package Nine;
public class CarTest {
public static void main(String[] args){
SaloonCar redCar = new SaloonCar();
redCar.setColor( "red") ;
System.out.println("getColor "+ redCar.getColor());
redCar.level = 3;//使用父类的成员变量
redCar.speed = 90;
redCar.gear(8);//使用父类的成员方法
redCar.style();
redCar.drive();
}
}
2、封装
封装是指把对象的属性隐藏在对象内部,不允许外部直接访问或修改,如上example中的private String color;成员变量,不能像 redCar.level = 3;这样直接访问,而使用该类定义的getColor()获取。
//设置器
public void setId(int id){
this.id = id;
}
//访问器
public int getId(){
return id;
3、多态
同一种操作在不同环境下有不同语义。方法或接口的不同实现形式,产生不同的执行结果。
example
package NineDuoTai;
public abstract class Car {
public abstract String getInfo();
}
package NineDuoTai;
public class Benz extends Car{
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "Benz";
}
}
package NineDuoTai;
public class BMW extends Car{
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "BMW";
}
}
package NineDuoTai;
/*根据指定的车型创建对象*/
public class CarFactory {
public static Car getCar(String name){
if(name.equalsIgnoreCase("BMW")){
return new BMW();
}else if(name.equalsIgnoreCase("Benz")){
return new Benz();
}else{
return null;
}
}
}
package NineDuoTai;
public class Custom {
public static void main(String[] args){
System.out.println("He want to buy BMW.");
Car bmw = CarFactory.getCar("BMW");
System.out.println("She want to buy Benz.");
Car benz = CarFactory.getCar("Benz");
System.out.println("get car "+benz.getInfo());
}
}
BMW与Benz都extends Car,但其getInfo()的实现不同。