封装
定义:把抽象出的数据(属性)和对数据的操作(方法)封装在一起,使数据被保护在内部,程序的其他部分只有通过被授权的操作(方法)才能对数据进行操作
封装的优点和如何实现
优点:可以隐藏实现细节,可以对传入的数据进行验证,保证安全合理
实现步骤:将属性进行私有化(private),分别提供一个公共的(public)set方法用于对属性判断
并赋值和一个公共的get方法用于获取属性的值。(Alt+inset快捷键可快速生成)
public void set(参数类型 参数名){
属性 = 参数名;//加入数据验证的业务逻辑
}
public 数据类型 get (){
return **;//
}
继承
定义:为了更好的解决代码复用的问题,当多个类存在相同的的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类只需要通过extends来声明继承父类即可,继承的本质就是建立一个查找关系。
基本语法
class 子类 extends 父类{
//子类会自动拥有父类的属性和方法
}
注意事项
1,子类继承的私有属性和方法的访问需要通过父类提供的公共的方法去访问。
2,子类必须调用父类的构造器,完成父类的初始化。
3,当创建子类对象时,不管使用子类的那个构造器,默认情况下总会去调用父类的无参构造器,如果父类未提供无参构造器,则需要在子类的构造器中用super去指定使用父类的那个构造器来完成父类的初始化工作,否则编译不会通过。
4,super在使用时,必须放在构造器第一行且只能在构造器中使用。super和this都只能放在构造器第一行,因此不能共存在同一个构造器中。
5,子类最多只能继承一个父类(指直接继承),即java中是单继承机制。如果想让A类继承B类和C类,可以A继承B,B继承C。
多态
多态指的是一个引用变量到底会调用那个类的方法,由具体的对象决定,而不是变量的声明类型决定(同一行为具有多个不同表现形式或形态的能力)。在java中多态的具体实现需要用到继承或者接口,以及方法的重写。
作用:提高程序的设计结构和可读性。它允许我们将子类的对象当做父类来使用,这样就可以使用同一段代码来处理不同的对象,从而达到代码的复用。
具体体现:一、方法的多态 (重写和重载就是方法多态的体现)
二、对象的多态
1、一个对象的编译类型和运行类型可以不一致
2、编译类型在定义对象时就已经确定了,不能改变,但运行类型是可以变化的。
3、编译类型看对象的左边,运行类型看对象的右边。
注意事项和使用条件:
1、多态的前提是两个对象(类)存在继承关系
2、多态的向上转型——本质上是父类的引用指向子类的对象
语法:父类类型 引用命 = new 子类类型();
特点:可以调用父类中的所有成员(需遵循访问权限),不能调用子类中的特有成员,最终运行效果看子类的具体实现,即调用方法时按照从子类开始查找方法然后调用。
3、多态的向下转型
语法:子类类型 引用名 = (子类类型) 父类引用;
特点:只能强转父类的引用,不能强转父类的对象,要求父类的引用必须指向的是当前目标类型的对象,当向下转型后,可以调用子类类型中所有的成员。
4、属性没有重写之说,属性的值看编译类型。
5、instanceof比较操作符,用于判断对象的运行类型是否为某类型或其子类型。