JavaEE三大特性:封装、继承、多态 详解~~~~~~~~~

**

JavaEE三大特性

**
封装
什么是封装?
隐藏对象的内部实现细节,控制对象的修改和访问的权限
private:可将属性修饰为私有,仅本类可见
封装的必要性
在对象的外部,为对象的属性赋值,可能存在非法数据的录入

public class TestEncapsulation {
    public static void main(String[] args) {
        Student student = new Student();
        //student.name = "zhansan";  //Student的name是私有属性,在外部无法直接访问,必须通过Get、Set方法进行赋值、取值。
        //↓↓↓↓↓↓↓下面代码块介绍如何访问私有属性↓↓↓↓↓↓↓
        student.age = 1000000000;//非法数据的录入,没有办法对属性的赋值加以控制。
    }
}
class Student{
    private String name;
    int age;
}

公共访问方法、过滤有效数据

public class TestEncapsulation {
    public static void main(String[] args) {
        Student student = new Student();
		//通过公共访问方法进行赋值
        student.setName("张三"); 
        student.setAge(10);
        System.out.println(student.getName());
        System.out.println(student.getAge());
    }
}
class Student{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }
   //对属性的赋值进行简单的逻辑判断,过滤掉非法数据
    public void setAge(int age) {           
        if (age < 0 && age >= 140) {
            age = -1;
        } else {
            this.age = age;
        }
    }
}

继承
子类 extends 父类,产生继承关系之后,子类可以使用父类中的非私有的属性和方法,子类可以定义自己独有的方法和属性。
继承的好处:既提高代码的复用性,有提高代码的可扩展性
特点:

  • 单继承,一个类只能有一个父类
  • 子类不可继承父类的构造方法、私有方法和属性
  • 子类父类不在同一个package(包)中,子类不可以继承default修饰的属性和方法

覆盖
父类提供的方法无法满足子类的需求时候,可在子类中定义和父类相同的方法进行覆盖
原则:

  • 方法名称、参数列表、返回值类型必须和父类相同
  • 访问修饰符范围大等父类
  • 子类覆盖父类的方法,优先调用子类的方法

super关键字

  • 在子类中可以访问父类中与子类同名的方法(包括构造方法)和属性

多态

  • 父类引用指向子类对象,从而产生多态 ——> Animal a = new Dog();
  • 二者具有直接或者间接的继承关系时,父类的引用可指向子类对象
  • 父类引用尽可调用父类所声明的属性和方法,不可调用子类独有的属性和方法

应用场景

  • 使用父类作为方法形参实现多态,使方法参数的类型更为宽泛
  • 使用父类作为方法返回值实现多态,是方法可以返回不同类型对象

向上转型(装箱)

  • Animal a = new Dog(); Animal父类 Dog子类
  • 仅可调用Animal中的属性和方法

向下转型(拆箱)

  • Animal a = new Dog(); Animal父类 Dog子类 Dog dog = (Dog)a;
  • 仅可调用子类对象的属性和方法

注意:强转时候要保证类型的正确性!!!!!
Animal a = new Dog();
Cat cat = (Cat) a;
类型转换异常!!!
在向下转型前,应该判断引用中的对象真实类型,保证类型转换的正确性

if( a instanceof Dog){
	Dog dog = (Dog)a;
}

你可能感兴趣的:(JavaEE,java)