Java学习笔记4
static关键字
普通的对象属性(没有static ):创建对象的时候产生,对象被回收的时候销毁,Static的属性的生命周期:加载class文件到jvm时立即产生,jvm退出时销毁。
static属性就是类的属性。
本类的static属性是被所有本类对象共享的。
类的属性调用是通过 类名. 的方式来调用的,可以用本类的所有对象调用
static关键字修饰在方法上
静态方法(类方法)加载到jvm就能用,不需要对象,通过类名调用
动态方法(对象方法)只有创建了对象才能使用
类方法的可使用性是比对象方法超前的。不需要创建对象就可以使用。类方法是被所有对象共享的,也可以被对象调用,但是不推荐。
static的类方法不能使用对象属性,没有this
对象方法调用对象方法,可以隐藏 this.
对象方法调用类方法,可以隐藏 类名.
主要应用于工具类
类的继承
特点:
父类更通用,子类更具体。
子类想要继承private属性就需要公共的get set方法。
只能单继承,子类只能有一个父类,父类可以有多个子类,子类可以有子类
语法:
public 子类 extends 父类{
子类属性;
子类方法;
}
方法的重写
在子类继承父类时,子类的方法和父类的方法相同。(访问修饰限制符public,返回值,方法名,参数列表)方法体不同。子类的方法将父类的方法覆盖。
在继承中,子类可以定义和父类相同的名称并且参数列表一致的函数,将这种函数称之为函数的重写。前提,必须存在有继承关系。特点,当子类重写了父类的函数,那么子类的对象如果调用该函数,一定调用的是重写过后的函数,可以通过super关键字进行父类的重写函数的调用。继承可以使得子类增强父类的方法。细节,函数名必须相同,参数列表必须相同,子类重写父类的函数的时候,函数的访问权限必须大于等于父类的函数的访问权限否则会编译报错,子类重写父类的函数的时候,返回值类型必须是父类函数的返回值类型或该返回值类型的子类,不能返回比父类更大的数据类型。
重写的用处在多态里面体现。
super关键字
子类实例化的过程中父类的构造器先被调用,然后再调用子类的构造器。
子类通过构造器实例化时要调用父类的默认构造器,是隐含的调用了super()这个方法。
但是如果子类的构造器中调用了父类中的有参数的构造器,那么无参数的构造器就不会被调用了。
super可以表示父类的引用,我们可以使用super和this来区分父类和子类中同名的属性,在子类中访问属性的查找顺序是首先在子类中查找指定的属性名字,如果在子类中没有该属性,那么就去父类中去查找该属性。方法也是一样的,当子类和父类有同样的方法时,通过子类调用的这个相同的方法时调用的是子类的方法,但是我们可以通过super对父类的引用来调用父类的方法。
final关键字
用于保证变量不可变
1) 修饰变量,被final修饰的变量、属性必须要初始化,赋初值后不能再重新赋值。
注意:局部变量不在我们讨论的范畴,因为局部变量本身就有作用范围,不使用private、public等词修饰。
2)修饰方法,被final修饰的方法代表不能重写。
3)修饰类,被final修饰的类,不能够被继承。
注意:final修饰的类,类中的所有成员方法都被隐式地指定为final方法。
(学习自:https://www.cnblogs.com/liun1994/p/6691094.html)
抽象类
当多个具体的实体类存在着共同的行为,但是有着不同的表现(多态),我们在父类继承过程中父类的方法具体实现不能确定,但是能确定他们都有这种行为。
语法 在父类中: public abstract 返回类型 方法名;(必须在抽象类中,而且子类必须实现抽象方法)
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象类特点:
1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
(学习自:http://www.runoob.com/java/java-abstraction.html)

浙公网安备 33010602011771号