java学习笔记:面向对象之final,static抽象接口
final和static关键字
1.final
(1)final是一个关键字,表示最终的意思。可以用来修饰类、修饰变量、修饰方法。举例:绝育手术
(2)final修饰类的时候:表明该类是最终类,不能被继承。
(3)final修饰成员变量:表明该变量是常量,不能再次被赋值,只能赋值一次。
(4)final修饰方法:表明该方法是最终方法,不能被覆盖override。
2.static
(1)static是一个关键字,表示静态的意思。可以用来修饰成员变量和成员方法。
(2)static修饰成员的特点:
A.被类的所有对象共享。其实也是判断一个成员是否应该用static修饰的条件。
B.可以通过类名直接访问。类名.static成员。推荐使用。
C.优先于对象存在。优先于所有对象加载。
D.随着类的加载而加载。(它在方法区中的静态区里)
3.使用场景及原因
package com.mystudy.constants;
public class Constants{
/*放各种常量:地址、网址、硬盘上的地址*/
public static final String ADDRESS = "中国北京";//调用:Constants.ADDRESS
//static修饰:是为了用类名进行访问,用到常量的时候。
//final修饰:不让外界进行修改
//public修饰:可以在别的类中尽心访问
}
4.访问权限
(1)非静态的成员方法:
A.能访问静态的成员变量
B.能访问非静态的成员变量
C.能访问静态的成员方法
D.能访问非静态的成员方法
(2)静态的成员方法:
A.能访问静态的成员变量
B.能访问静态的成员方法
(3)注意事项:静态成员方法中不能出现this、super这样的关键字。愿意你:静态是随着类的加载而加载,this、super这样的关键字是随着对象的创建而存在的。(开发的原则:先进内存的东东不能访问后进内存的东东。)
抽象类
1.在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
2.抽象类、抽象方法都必须用abstract修饰。
public abstract void eat();
public abstract class Animal{}
3.抽象类的特点:
(1)抽象类和抽象方法都必须用abstract来修饰。
(2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
(3)抽象类不能实例化,不能直接创建对象,但可以通过多态来创建对象。
抽象类如何实例化呢?参照多态的方式,通过子类实例化。
Animal ani = new Cat();
ani.ea();
ani.sleep();
(4)抽象类的子类:要么重写抽象类中的所有抽象方法,要么也是抽象类。
4.抽象类的成员特点:
成员变量:有成员变量,成员变量可以是变量,也可以是常量。
构造方法:有构造方法。抽象类中构造方法的作用是用于子类访问父类数据的初始化。
成员方法:有成员方法,成员方法可以是抽象的,也可以是非抽象的。
抽象方法:限定子类必须完成某些动作,起到一个规范和统一的作用。
非抽象方法:提高代码的复用性。
5.思维的方式:
分析:从具体到抽象
实现:从抽象到具体
使用:使用的是具体的类的对象。
举例:老师、基础班老师、毕业班老师
接口
1.类或抽象类:放一些共性的东西,大家都有的东西,即“你会我也会,你有我也有。”
接口:定义的是额外的扩展性的东西,不是每个人都会的。
2.接口的特点:
(1)定义接口使用的是interface关键字。
(2)类和接口之间是实现关系,用implements关键字。class implements interface
(3)接口不可以创建对象,可以使用多态的形式创建对象。它连构造方法都没有。
接口有没有其他的方式实例化呢?参照多态的形式使用类来实现实例化。
Jumping j = new Cat();
j.jump();
多态的几种形式:
A.具体类多态(几乎不用)
B.抽象类多态
C.接口多态(最常用)
(4)接口的实现类 一个类实现一个接口。
要么重写接口中的所有抽象方法,要么这个类就是抽象类。
3.接口的成员特点:
成员变量:有成员变量,而且只能是常量。有默认的public static final修饰符,即是静态常量。
构造方法:没有构造方法
成员方法:有成员方法,而且都是抽象的。有默认的public abstract修饰符,即是抽象方法。
4.关系区别
类与类:继承关系。只能单继承,可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口:继承关系,可以单继承,也可以多继承。
5.抽象类和接口的区别
(1)成员区别:
抽象类:成员变量:可以是变量,也可以是常量。构造方法:有。成员方法:可以是抽象方法,也可以是非抽象方法。
接口:成员变量:只能是常量。成员方法:只能是抽象方法。
(2)关系区别
类与类:继承关系。只能单继承,可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口:继承关系,可以单继承,也可以多继承。
(3)设计理念的区别
抽象类:被继承,体现的是is a。抽象类中定义的是继承体系的共性功能。
接口:被实现,体现的是like a。抽象中定义的是该体系的扩展功能。
四种权限修饰符
1.本类 2.同一个包下(子类和无关类) 3.不同包下(子类和无关类)
3.1子类 3.2无关类
private 1.Y
默认(friendly) 1.Y 2.Y
protected 1.Y 2.Y 3.1Y
public 1.Y 2.y 3.1Y 3.2Y