Java:封装、继承、多态、强制类型转换

1:封装性

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

在这里插入图片描述

➢ 类里的绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。
如果某个类主要用做其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法

  • 广义的封装:具体实现封装起来,不对外暴露

  • 狭义的封装:属性封装,get,set方法

2:继承

在这里插入图片描述

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 
} 
}
  • 多态数组
public static void main(String[] args) 
  • 多态属性
一个引用类型变量如果声明为父类的类型,但实际引用的是子类 
对象,那么该变量就不能再访问子类中添加的属性和方法 
Student m = new Student(); 
m.school = “pku”; //合法,Student类有school成员变量 
Person e = new Student(); 
e.school = “pku”; //非法,Person类没有school成员变量 
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编 
译错误 

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()); 
    } 
} 
}

猜你喜欢

转载自blog.csdn.net/m0_51755061/article/details/115033821