java_面向对象三大特性

java_面向对象三大特性

封装 继承 多态

封装

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

使用访问修饰符:private (可将属性修饰为私有,仅本类可见)

实体类(Entity)(私有属性、公共访问方法、无参构造方法)

公共访问方法

以访问方式的形式,进而完成赋值与取值操作。

提供公共访问方法,以保证数据的正常录入。

命名规范
//赋值
setXXX()//使用方法参数实现赋值
//取值
getXXX()//使用方法的返回值实现取值

在公共方法的内部可以添加逻辑判断,进而过滤非法数据

封装

继承

父类是对子类共性的抽象,父类盒子类的关系,是由一般到特殊的关系

在设计类的继承关系时,应当把共性放在父类,特性放在子类。

语法:

class 子类 extends 父类{ }  //定义子类,显示继承父类

应用:

​ 产生继承关系后,子类可以使用父类中的属性和方法,也可以定义子类独有的属性和方法

好处:

​ 既提高代码的复用性,又提高代码的可扩展性

继承的特点

Java为单继承,一个类只能又一个直接父类,但可以多级继承,属性和方法逐级叠加

不可继承

1、构造方法:类中的构造方法,只负责创建本类对象,不可继承

2、private修饰的属性和方法

3、父子类不在同一个package中时,default(同包可见)修饰的属性和方法

本类 同包 非同包子类 其他
private × ×
default ×
protected ×
public

方法的覆盖

方法覆盖原则:

1、方法名称、参数列表、返回值类型必须与父类相同

2、访问修饰符可与父类相同或是比父类更宽泛

方法覆盖的执行:

子类覆盖父类方法后,调用时优先执行子类覆盖的方法


构建子类对象时,先构建父类对象。(父类是子类的组成部分)

继承后创建对象

任何子类的构造方法,首行默认super();


super 父类–>超类

​ 子类–>派生类

super关键字

在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或者方法存在重名(属性遮蔽、方法覆盖)时,需要加以区分,才可以专项访问

子类继承父类后,子类构造函数隐式默认第一行为super();

super用在构造方法上,调用父类的构造方法【只能作为构造方法的第一句】

super访问方法

super关键字可以在子类中访问父类的方法;使用“super.”的形式访问父类的方法,进而完成在子类中的复用;再叠加额外的功能代码,组成新的功能。【最经典的应用:使用super在子类中,调用父类被覆盖的方法】

class Parent{
  public void m(){ //父类方法 m() 
    System.out.println("m in Parent");
  }
}
class Child extends Parent{
  public void m(){  //父类同名方法 m() 被覆盖
     System.out.println("m in Child");
  }
  public void m1(){
    this.m();   //调用本类Child 的方法 m()
  }
  public void m2(){
    super.m();  //调用父类被覆盖的方法
  }
}
public class TestSuper{
  public static void main(String srgs[]){
    Child c = new Child();
    c.m1();
    c.m2();
  }
}
super访问属性

父子类的同名属性不存在覆盖关系,两块空间同时存在(子类遮蔽父类属性),需要使用不同的前缀进行访问


构造方法的第一个语句的三种可能:

1、super(参数) 指明调用父类那个构造方法

2、this(参数) 指明调用本类那个构造方法

3、既不是this(参数)也不是super(参数)【编译器会==自动添加super(),==即调用父类的无参构造方法】


多态

[引用类型对象类型必须是一致的,java 语言强类型的约束]

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

Animal a = new Gog();

多态特点

1、只能对引用调用引用类型中声明的方法

2、在运行时,根据对象的实际类型,调用子类覆盖后的方法

3、对象类型不变、强制类型转换,用于父类引用赋值给子类引用,无法改变对象类型

instanceof

语法格式:引用 instanceof 类名 (组成布尔表达式)判断引用中的对象是不是类名.

用作在前置类型转换之前进行类型判断,避免类型转换异常

“instanceof” 是不是

向下转型前,应判断引用中的对象真实类型,保证类型转换的正确性


补充

使用 instanceof 时,需要从子类开始判断,避免直接与父类进行比较

class People{}
class Father extends People{}
class Son extends Father{}

public Test{
  public static void main(String[] arg){
    People p1 = new Son();
    System.out.println(p1 instanceof Facther);
    //输出结果为true
  }
}

多态的应用场景

1、使用父类作为方法的形参,实现多态

​ 调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象

2、使用父类作为方法的返回值,实现多态

​ 调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象

多态的作用

1、把不同子类的对象统一看作是父类对象来处理,屏蔽了不同子类的差异(通用性)

灵活,耦合度低

猜你喜欢

转载自blog.csdn.net/qq_38928944/article/details/79763738