面向对象的特征
封装、继承、多态、(有人问第四个特征,再加抽象)
封装 体现形式(2种)函数---提高代码的复用性
属性的私有化---将属性设置为私有的,通过提供对外的访问方法来间接操作对应属性,可以在方法内对属性做一系列的限定使之符合要求---提高了代码的安全性
private 默认 protected public
1 2.5 3 4
本类 子类 同包类 其他类
权限修饰符本类
子类
同包类
其他类
public
可以
可以
可以
可以
protected
可以
可以
可以
不行
private
可以
不行
不行
不行
默认
可以
同包子类可以
可以
不行
继承
对一些类中共有的属性和方法进行提取,提取出来一个新的类,通过extends关键字是新的类和原来的来产生联系,这种联系称之为继承。新的类称之为父类(超类、基类),原来的类称之为子类(派生类)
注意:Java中支持的是单继承---一个子类只能有一个父类,而一个父类可以有多个子类
class A {
public int m(){return 0;}
}
class B {
public String m(){return “aaa”;}
}
class C extends A, B {}
C c = new C();
c.m();---返回值类型是什么?
优点1. 提高安全性
2. 提高复用性
3. 统一结构
super关键字在创建子类对象的时候,会先创建一个父类对象,而这个父类对象在子类中以super关键字的形式存在。super是父类对象的引用,可以认为是父类产生的一个虚拟对象
如果一个构造函数中已经存在了this语句,那么此时不能写super语句,此时如何创建父类对象?---this语句的作用?
子类的每个构造函数中都直接或者间接地有一个super语句---对
如果父类只提供了含参构造,子类的构造函数还能使用默认的super语句吗?---不能
可以通过this来调用父类中的方法或者属性吗?---可以。会先检查当前类中是否有对应属性,如果没有则再检查父类。
重写在父子类中,存在了方法签名完全一致的方法,称之为函数的重写/覆盖
注意:重写遵守的五个原则:两等两小一大
1. 方法签名一致
2. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
3. 当父类中的方法的返回值类型是引用数据类型的时候,子类方法的返回值类型要么和父类方法的返回值类型一致,或者子类方法的返回值类型是父类方法的返回值类型的子类
class A{
public Pet m(){}
}
class B extends A {
public Dog m(){};
}
4.子类方法的权限修饰符的范围要大于等于父类方法中权限修饰符的范围
多态 体现形式编译时多态---重载
运行时多态---向上造型,重写---继承是运行时多态的前提
注意:用向上造型创建对象的时候,用父类声明,用子类创建;父类在声明的时候就相当于给了这个对象一份提纲;子类创建对象的时候是告诉这个对象该怎么干---能不能用看父类,具体执行看子类
重写的理解1. 方法签名完全一致
2. 子类重写的方法的权限修饰符要大于等于父类
class A{
public void m(){}
}
class B extends A{
protected void m(){}
}
A a = new B();
a.m(); //a对象用A类来声明的,同时告诉a对象身上有一个公共的m方法,可以在任何地方使用;
在使用方法的时候需要看具体子类,这时候,子类中重写的这个方法告诉a不能在其他类中使用---这时候产生了冲突
3. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
注意:八种基本数据类型之间是相互平等的,不存在继承关系