天天看点

Java:封装、继承、多态、强制类型转换1:封装性2:继承3:多态4:数据类型的转换

面向对象三大特征

  • 1:封装性
  • 2:继承
  • 3:多态
  • 4:数据类型的转换

1:封装性

封装两个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。这两个方面都需要通过使用Java提供的访问控制符来实现。

Java提供了3个访问控制符:private、缺省、protected和public,

Java:封装、继承、多态、强制类型转换1:封装性2:继承3:多态4:数据类型的转换

➢ 类里的绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。

➢ 如果某个类主要用做其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。

  • 广义的封装:具体实现封装起来,不对外暴露
  • 狭义的封装:属性封装,get,set方法

2:继承

Java:封装、继承、多态、强制类型转换1:封装性2:继承3:多态4:数据类型的转换

3:多态

  • 多态的作用:代码更灵活

3.1 表现

  • 方法的多态性:方法的重写
  • 对象的多态性
对象的多态性:父类的引用指向子类的对象
 Person p2 = new Man();
 //多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 ---虚拟方法调用
 p2.eat();
 p2.walk();
           

3.2 多态的应用

  • 多态参数
方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法 
public class Test { 
public void method(Person e) { //Person e = new Student()
 e.getInfo(); 
} 
public static void main(Stirng args[]) { 
 Test t = new Test(); 
 Student m = new Student(); 
 t.method(m); // 子类的对象m传送给父类类型的参数e 
} 
}
           
  • 多态数组
  • 多态属性
一个引用类型变量如果声明为父类的类型,但实际引用的是子类 
对象,那么该变量就不能再访问子类中添加的属性和方法 
Student m = new Student(); 
m.school = “pku”; //合法,Student类有school成员变量 
Person e = new Student(); 
e.school = “pku”; //非法,Person类没有school成员变量 
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编 
译错误 
           

4:数据类型的转换

  • 向上转型
Java:封装、继承、多态、强制类型转换1:封装性2:继承3:多态4:数据类型的转换
  • 向下转型

有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的方法。子类特有的方法不能调用。

如何才能调用子类特的属性和方法?使用向下转型(强制转换)。
  • 子类类型 变量 = (子类的类型)父类的变量;
    Java:封装、继承、多态、强制类型转换1:封装性2:继承3:多态4:数据类型的转换
public class Test { 
public void method(Person e) { // 设Person类中没有getschool() 方法 
  // System.out.pritnln(e.getschool()); //非法,编译时错误 
  if (e instanceof Student) { 
    Student me = (Student) e; // 将e强制转换为Student类型 
    System.out.pritnln(me.getschool()); 
    } 
} 
}