类的三大特征
一、封装
封装的载体是类,且对象的属性和行为被封装在这个类中。在面向对象程序设计方法中,封装(英语:Encapsulation)是指类将对象的属性和行为隐藏起来,对客户隐藏其实现细节的思想。封装可以被认为是一个程序的保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。如果想要访问该类的代码和数据,必须通过严格的接口进行。合适的封装可以可以增强代码的易维护性和安全性。
实例1:"被封装的厨师"为顾客做一道香辣肉丝
顾客到一家餐厅去吃饭,点了一盘香辣肉丝,觉得很好吃,顾客就像知道厨师的名字,希望厨师再为自己多做点事情。按照日常生活场景来讲,去餐馆吃饭,下单的是服务员,上菜的也是服务员,厨师被封装在参观中,顾客无法直接接触到厨师。
package Applications;
public class Restaurant {
private Cook cook = new Cook(); //1、餐厅封装的厨师类
public void takeOrder(String dish) {
//2、定义下单成员方法(点菜提供服务、不提供其他服务)
cook.cooking(dish); //3、通知厨师做菜(洗菜、切菜、开始烹饪)
System.out.println("您的菜好了,请慢用"); //4、通知顾客菜好了
}
public String saySorry() {
return "抱歉,餐厅不提供此项服务";
}
public static void main(String[] args) {
//类的主方法
// TODO Auto-generated method stub
Restaurant waiter = new Restaurant(); //创建服务员对象,为顾客提供服务
System.out.println("请让厨师帮我做一份香辣肉丝。****");
waiter.takeOrder("香辣肉丝");
System.out.println("厨师名字是什么。****");
System.out.println(waiter.saySorry());
System.out.println("我需要厨师帮我添加一些葱花。****");
System.out.println(waiter.saySorry());
}
class Cook{
//厨师开始准备和做菜
private String name;
public Cook() {
//用构造方法定义厨师对象
//成员变量和方法变量参数重复,用this将方法变量值传递给成员变量
this.name = "Tom"; //做菜的厨师是Tom
}
private void washVegetavles() {
//定义洗菜成员方法
System.out.println(name+"洗菜");//Tom洗菜
}
private void cutOnion() {
//定义做菜成员方法
System.out.println(name+"切辣椒丝");//Tom切菜
}
void cooking(String dish){
//Tom做菜
washVegetavles();
cutOnion();
System.out.println(name+"开始烹饪"+dish);
}
}
}
console:
请让厨师帮我做一份香辣肉丝。****
Tom洗菜
Tom切辣椒丝
Tom开始烹饪香辣肉丝
您的菜好了,请慢用
厨师名字是什么。****
抱歉,餐厅不提供此项服务
我需要厨师帮我添加一些葱花。****
抱歉,餐厅不提供此项服务
封装的艺术体现:
- 先由服务员和顾客交流,再由服务员和厨师交流
- 整个过程厨师没有和顾客交流
- 作为顾客不知道自己的菜是哪位厨师用什么方法做的
二、继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
子类和父类的继承关系可以这样理解:四边形(F)包括平行四边形、矩形、菱形、梯形(S)。其中S继承了F的一些属性(包括有四条边,内角和为360度等),同时又新添加了一些自己的特有属性和方法(比如平行四边形两对边平行等)。我们可以说平行四边形是四边形,但是不能说四边形是平行四边形。同理,Java中我们可以说子类的实例都是父类的实例,但是不能说父类的实例是字类的实例。
继承实际上是实现重复利用的重要手段,子通过继承,复用父类属性和行为的同时又添加字类特有的属性和行为。提高代码编写效率的同时,保持程序的可延展性,以满足解决各类不同实际问题的需求。
继承的基本思想是基于某个父类的拓展,并制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的默写方法。
1、extend关键字
在Java中,让一个类继承另一个类需要使用extend关键字:
Child extend Parents
子类在继承父类的同时,也继承了父类中的属性和方法。
实例2:使用继承表现pad和Computer的关系
创建一个电脑类Computer,Computer类中有屏幕属性screen、开机方法startup()。现在Computer类有一个子类Pad,除了和Computer类具有相同的屏幕属性和开机方法外,Pad类还有电池属性battery,使用继承表现pad和Computer的关系:
package Applications;
class Computer {
//父类
String screen = "液晶显示屏"; //父类属性
void startup() {
//父类方法
System.out.println("电脑正在开机,请稍等!");
}
}
public class Pad extends Computer{
String battery = "5000mA";
public static void main(String[] args) {
// TODO Auto-generated method stub
Pad pc = new Pad();
System.out.println("Computer的屏幕是"+pc.screen);
pc.startup();
Pad ipad = new Pad();
System.out.println("Pad的屏幕是"+ipad.screen);
System.out.println("Pad的电池是"+ipad.battery);
ipad.startup();