Java Nine类的继承封装与多态

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()的实现不同。

 

你可能感兴趣的:(Java Nine类的继承封装与多态)