2022年4月21日-Java面向对象三大特性

Java面向对象三大特性


日期 :2022年4月21日 13:03:46

主题 :Java面向对象三大特性

作者Nac Jackson


一、封装

封装是什么?

尽可能的隐藏对象内部的实现细节,控制对象的修改及访问权限(通过修饰符实现)

封装重要吗?

答案是肯定重要,在对象外部对相应属性赋值可能会存在非法数据录入,存在安全隐患。此前我们写的代码都是没有进行封装的,也没有对其赋值进行控制。所以实现属性的封装是有非常重要的。

对象的封装通过访问修饰符来完成的,所以对应的访问修饰符具有对数据访问拥有不同的权限

访问对象内部数据是通过get/set方法实现的

public class demo_5 {
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    private String name; 
    
    
    private String age;

    public demo_5(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

二、继承

继承是什么?

字面意思理解就是儿子获得了父亲的财产,在Java中的继承也是差不多的

继承的规律:

  • 功能越精细,重合点越多,越接近父类。
  • 功能越粗略,重合点越少,越接近Object类
class Person{
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    private String name;
    private String age;

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }
}
class Boy extends Person
{

    public Boy(String name, String age) {
        super(name, age);
    }
}

继承的特点:

- 语法:class子类extends父类//定义子类时,显示继承父类
- 应用:产生继承关系后,子类可以使用父类中的属性和方法,也可以定义子类独有的方法
- 好处:提高了代码的重用性、可扩展性

注意:

  • 构造方法不可以继承,private修饰的属性和方法不可继承,父子类不在同一个包内时,default修饰的属性和方法不可继承

三、访问修饰符

自身类包内非包内其他
private×××
default××
protected×
public

四、方法重写

什么是重写?

当一个父类的方法无法满足到实际的使用需求时,可以再子类中定义一个相同的方法进行覆盖,也称为重写(重新写一次对应的方法)

重写(Override)

  • 规则:
    • 方法名、参数列表、返回值类型相同
    • 访问修饰符可以与父类相同或者是比父类更加宽泛

super关键字

  • 第一种:子类中使用super的形式访问父类的属性和方法
    public Boy(String name, String age) {
        super.getName();
        super.name="Tom";
    }
  • 第二种:子类的构造方法首行,调用父类构造方法的
    public Boy(String name, String age) {
        super(name, age);
    }

五、多态

什么是多态?

父类引用指向子类对象,从而产生多种形态

二者间有直接或者是间接继承关系时,父类引用可指向子类对象,即形成多态

父类应用之间仅可调用父类声明方法和属性,不可调用子类独有的属性和方法

多态的作用?

  • 屏蔽子类之间的差距

  • 灵活、耦合度低

六、装箱拆箱

向上转型(装箱):

class demo {
    public static void main(String[] argd){
        Person person =  new Girl();
        person.person();
    }
}
class Person{
    public void person(){
        System.out.print("This is a person.");
    }
}
class Girl extends Person {
    public void person (){
        System.out.print("This is a Girl.");
    }
}

向下转型(拆箱):

public class demo_5 {
    public static void main(String[] args) {

        Person person = new Boy("Bittur","fly");
        Person Girl = person;
        System.out.println(Girl.toString());
    }

}

class Person{
    protected String name;
    protected String age;

    public Person() {

    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

}

class Boy extends Person {
    public String getVoice() {
        return voice;
    }

    public void setVoice(String voice) {
        this.voice = voice;
    }

    public String getCharacter() {
        return character;
    }

    public void setCharacter(String character) {
        this.character = character;
    }

    public Boy(String voice, String character) {
        this.voice = voice;
        this.character = character;
    }

    public Boy(String name, String age, String voice, String character) {
        super(name, age);
        this.voice = voice;
        this.character = character;
    }

    @Override
    public String toString() {
        return "Boy{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", voice='" + voice + '\'' +
                ", character='" + character + '\'' +
                '}';
    }

    private String voice;
    private String character;
}

class Girl extends Person{
    public String getVoice() {
        return voice;
    }

    public void setVoice(String voice) {
        this.voice = voice;
    }

    public String getCharacter() {
        return character;
    }

    public void setCharacter(String character) {
        this.character = character;
    }

    public Girl(String voice, String character) {
        this.voice = voice;
        this.character = character;
    }

    public Girl(String name, String age, String voice, String character) {
        super(name, age);
        this.voice = voice;
        this.character = character;
    }

    @Override
    public String toString() {
        return "Boy{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", voice='" + voice + '\'' +
                ", character='" + character + '\'' +
                '}';
    }

    private String voice;
    private String character;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值