相比上周的基础语法,这周我主要学习了面对对象思想:
- 关于static关键字意为—“静态”:在类中,static表示的方法或者变量为该类所属的特性,而非对象所持有的,例如:当你改变了类中的一个成员变量的值时,那么它的所有创建的对象的成员变量都为该值。当你要访问用static修饰的成员变量或者方法时,用类名调用即可。static在java虚拟机中的编译顺序是优先于类的。
- package和import关键字:package在java中是用来表示并且可以用来创建文件夹的,通常是package+文件名。而import是用来导包:提前声明引用的类的位置。
- java中的四种访问权限修饰符:private, , protected ,public
- 封装对象:在java中有一个原则就是尽量隐藏对象的信息(成员变量和方法),即需要private。
- this关键字:表示为当前对象。
this的四个场景:
1)解决成员变量和形参的二义性
2)同类中实例方法间互调
3)将当前对象作为参数传递给另一个方法
4)将当前对象作为方法的返回值(链式方法编程)
5)构造器重载的互调,this必须写在构造方法的第一行--------
举个栗子: 注意调用构造器时应该是参数少的调参数多的,只需要写用的上的参数,其余参数赋默认初始化的值即可。
class Friend{
Friend(){
this(null,0);
}
Friend(String name){
this(name,0);
}
Friend(String name,int age){
this.name=name;
this.age=age;
}
}
6)static不能和this一起使用(例如不能在主方法里使用this)。
-
类的继承关系:(class a extends b{})继承是指一个类拥有另一个类的字段和方法,即子类与父类的关系。子类可以不用重复写。当你在引用对象(前提是有继承关系的类)并调用方法时,先从子类中寻找,再从父类中寻找。当然,并不是父类中的一切都满足于子类,所以子类可以覆盖父类的方法来实现自身的特点。但是当父类使用private修饰的部分和父类构造器子类是继承不到的。
-
super关键字:表示的是当前对象的父类。可以用super访问到父类。
-
隐藏问题(就近原则的原理):
1)局部变量和成员变量同名,局部变量隐藏成员变量,使用this解决
2)在继承关系的条件下(少见):子类存在与父类同名的成员变量,子类成员变量隐藏父类成员变量,使用super解决
3)在继承关系的条件下(少见):子类存在与父类相同的静态方法----------------->静态方法不存在覆盖。 -
多态:前提是创建对象时使用父类;先检查父类的方法,再检查子类的方法。
在运行的时候执行的是父类的方法,在底层按类执行而不是对象,而类是由编译的时候就决定的。
编译类型<-----Animal a=new Dog();------->运行类型。 -
final修饰符:(众多修饰符中,唯一可以修饰局部变量)
1)final类:不能有子类
2)final方法:该方法不能被子类覆盖:
父类在构造器中调用的初始化方法
父类的方法只能供子类调用,不能被子类继承
3)final变量:
基本数据类型:常量(public static final修饰),值不能再改变,只能赋值一次。
引用数据类型:堆空间开辟的地址值不能改变,但所引用空间的内容可以被改变
拓展:局部内部类只能访问final修饰的局部变量 -
(abstract)抽象类和抽象方法:
抽象类特点:
1)抽象类不能创建对象
2)抽象类可以不包含抽象方法,一旦包含,必须是抽象类
3)抽象类构造方法不能私有化
4)抽象类是不完整的
抽象方法可以用在子类中调用,且方式不同,并且必须覆盖父类方法,若子类不覆盖,那么子类也声明为抽象类。
抽象方法必须在抽象类中,且没有方法体只有方法声明,待子类进行实现.