封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问
一共4个:privite,default,protected,public,访问控制级别由小到大
使用范围:类里的一个成员(成员变量,方法,构造器等)
作用:这个成员只能在当前类的内部被访问,所以这个修饰符用来修饰成员变量是最适合的。
使用范围:类里的一个成员(成员变量,方法,构造器等)或者一个外部类
作用:不使用任何访问控制修饰符就是包访问权限,包访问权限即能被相同包下的其他类访问
使用范围:类里的一个成员(成员变量,方法,构造器等)
作用:被它修饰的成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问
使用范围:类里的一个成员(成员变量,方法,构造器等)或者一个外部类
作用:不管在哪都能访问这个成员或者类都能访问
系统默认的构造器是无参的
var p = new Person();
但是通过自定义一个构造器,可以进行对象的初始化
下面这段代码通过构造器来初始化对象
var p =new PersonTest("java",899);
这里的this(name,color)就是调用了前面那个构造器,注意:调用语句必须写在执行体的第一行
修饰符 class 子类名 extends 父类名
{
}
定义了一个ap子类继承了apple,然后new一个ap对象(ap类里没有定义任何属性),可以看到p有name,color,weight等apple类的成员。
当父类中的方法不能满足子类时,子类需要通过方法重写来满足要求
两同:
方法名相同,形参列表相同
两小:
子类方法返回值类型要比父类方法返回值类型更小或者相等
子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或者相等
一大:
子类方法的访问权限要比父类方法访问权限更大或者相等
重写的方法和被重写的方法要么都是类方法,要么都是实例方法
子类也可以重载父类的方法:在子类中定义一个与父类方法名字相同,参数列表不同的方法即可
如果父类方法使用private修饰,那么子类就无法重写父类方法
如果在子类中对父类中某个方法进行了重写,仍需要调用父类中这个方法的话,需要用到super
格式:
调用被覆盖的实例方法super.fly()
调用被覆盖的实例变量super.a
super和this都不能出现在static修饰的方法中
如果父类中被覆盖的是类变量,则用类名加变量的方式调用
下面这段代码会先输出父类的a,再输出本类的a
如果在某个方法中没有指定调用哪个a
则查找顺序是:
System.out.println(((Parent)d).a);
本来d是子类orz的对象
使用语句(Parent)d 后,就转型成父类Parent的对象了
重复的部分直接用super调用即可,格式super(size,name)
与this调用同一个类的构造器相同,super也必须在第一行
通过一个父类可以引用它的不同的子类
我们只有在运行的时候才知道引用变量所指向的具体实例变量
引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法