Java的三大特性

Java的三大特性

三大特性

  • 封装
  • 继承
  • 多态

封装

为什么要封装

  1. 提高可重复利用性
  2. 提高数据的安全性,用户不可以直接接触成员遍历,而是通过自己定义的方法赋值,如getter/setter
  3. 隐藏实现细节,如用户赋值之后,方法都要加一,这些细节不需要用户知道

实现过程

定义两个实现类

public class Person2 {
    public String name;
    public Integer age;

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

public class Person {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age + 1;
    }

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

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

public class test {
    public static void main(String[] args) {
        Person2 p2 = new Person2();
        p2.age = 2;
        p2.name = "abc";
        // 不可以隐藏细节
        p2.age = p2.age + 1;
        // 可以随意修改成员变量
        p2.age.byteValue();
        System.out.println(p2.toString());

        Person p = new Person();
        p.setAge(3);
        p.setName("cba");
        System.out.println(p.toString());
    }
}/*
Person2{name='abc', age=3}
Person{name='cba', age=3}
*///:~

从例子中就可以体现到封装的用处了

继承

为什么要继承

以动物为例子,狗和猫都是动物,动物上的一些习性,它们也都会,所以就直接继承动物习性,不需要狗和猫都各自实现了。
在这里插入图片描述

  1. 提高代码的复用性,减少代码量
  2. 提高了类之间的耦合性

实现过程

以猫狗为例子

public class Animal {
    private String name;

    public Animal(String name){
        this.name = name;
    }

    public void eat(){
        System.out.println(name + "吃饭");
    }

    public void sleep(){
        System.out.println(name + "睡觉");
    }
}

public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void eat() {
        super.eat();
    }

    @Override
    public void sleep() {
        System.out.println("我不睡觉");
    }
}

public class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }

    @Override
    public void eat() {
        System.out.println("我不吃饭");
    }

    @Override
    public void sleep() {
        super.sleep();
    }
}

public class test {
    public static void main(String[] args) {
        Dog dog = new Dog("狗");
        dog.eat();
        dog.sleep();
        System.out.println("===============");
        Cat cat = new Cat("猫");
        cat.eat();
        cat.sleep();
    }
}/*
我不吃饭
狗睡觉
===============
猫吃饭
我不睡觉
*///:~

继承规则

  1. 子类拥有父类非 private 的属性、方法。
  2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。
  4. Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类
    在这里插入图片描述

多态

为什么要多态

同一个可以表现出不同的状态,大大增大了可扩展性

多态的规则

  1. 父类和子类之间一定要有继承关系
  2. 重写继承方法
  3. 向上转换或向下转换

实践

public class Animal {
    private String name;

    public Animal(String name){
        this.name = name;
    }

    public void eat(){
        System.out.println(name + "吃饭");
    }

    public void sleep(){
        System.out.println(name + "睡觉");
    }
}
...
public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void eat() {
        super.eat();
    }

    @Override
    public void sleep() {
        System.out.println("我不睡觉");
    }

    public void catchMouse(){
        System.out.println("抓老鼠");
    }
}
...
public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void eat() {
        System.out.println("我不吃饭");
    }

    @Override
    public void sleep() {
        super.sleep();
    }
}

public class test {
    public static void main(String[] args) {
    	/**
    	 * 向上转型 父类->子类
    	 */
        Animal a1 = new Cat("猫");
        a1.eat();
        a1.sleep();

        /**
         * catchMouse是Cat特有的,所以必须向下转型 子类->父类
         */
        Cat a2 = (Cat)a1;
        a2.catchMouse();


        Animal d1 = new Dog("狗");
        /**
         * 报错是因为Dog和Cat之间不存在继承关系
         */
        Cat d2 = (Cat)d1;

    }
}/*
猫吃饭
我不睡觉
抓老鼠
Exception in thread "main" java.lang.ClassCastException: com.company.Features.polymorphism.Dog cannot be cast to com.company.Features.polymorphism.Cat
	at com.company.Features.polymorphism.test.main(test.java:34)
*///:~

待续。。。
参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值