面向对象的三个特性

一、封装(Encapsulation)

背景:对象的实例变量能被随意的调用,例:student.score = 98;可视为远程控制修改student的实例变量;如果有人设置为student.score = 0;会造成严重的后果;

Solution:对所有的实例变量创建Setter方法,强制调用程序必须调用Setter方法对实例变量进行存取。

	private int score;
    public void setScore(int chineseScore){
        if (chineseScore < 60){
            score = chineseScore;
        }
    }

基本原则:将实例变量标记为私有(private),提供公有(public)的Getter和Setter方法进行存取。

二、继承(Extends)

定义:设计继承时,我们会把共同的程序代码放到一个类中,“子类继承父类”:意味着子类继承了父类的属性和方法。子类可以加入自己的方法和实例变量,当子类定义的方法与父类的方法出现重名,则覆盖。

注:1、子类会继承父类public类型的实例变量和方法,private类型的不继承。
2、如果不想某个方法被覆盖,该方法用final修饰。

public class Phone {
    String shape;
    void takePhoto(){
        //.....
    }
}
public class HuaweiPhone  extends Phone{
    int price = 1000;
    
    void takePhoto(){
        //...卡咔咔咔
    }
    void faceRecognition(){
        //人脸识别
    }
}

判断:使用IS-A进行测试,例:三角形是一个多边形(正确),外科医生是一个医生(正确),澡盆是一个浴室(错误)。

意义:继承可以确保某个父类下的所有类都会具有父类持有的方法和实例变量。通过继承来定义相关类间的共同协议。

三、多态

前置:先看一般声明和引用的方法。

Dog dog = new Dog();

1、声明一个引用变量:Dog dog
2、创建对象:new Dog()
3、引用和对象进行连接:=

注:引用类型和对象的类型相符。

引用类型可以是实际对象类型的父类:

Animal dog = new Dog();

参数和返回类型也支持多态:

public class TestPhone {
    public void testMakePhoto(Phone a){
        a.takePhoto();
    }
}
class TestRes{
    public void test(){
        TestPhone tP = new TestPhone();
        XiaomiPhone xiaomiPhone = new XiaomiPhone();
        ApplePhone applePhone = new ApplePhone();
        tP.testMakePhoto(xiaomiPhone);
        tP.testMakePhoto(applePhone);
    } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值