java--面向对象

Posted _殇j

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java--面向对象相关的知识,希望对你有一定的参考价值。

 

1. 定义类

[修饰符] class 类名{
    零到多个构造器定义...
    零到多个成员变量...
    零到多个方法...
}

1.1 定义构造器

[修饰符] 构造器名(形参列表){
    // 构造器名必须与类名相同
    // 由零到多条可执行语句组成
}

2. 修饰符

2.1 修饰符适用范围

  外部类/接口 成员属性 方法 构造器 初始化块 成员内部类 局部成员
public    
protected      
包访问 O O
private        
abstract          
final    
static      
strictfp        
synchronized            
native            
transient            
volatile            
default            
相同颜色不能同时出现(或同时出现无意义(灰色))

2.2 修饰符使用详情

类(class)([12] [~34]) 方法([1234] [~5] [~67])
public 可被所有类使用(需类名与文件名相同) public 4.全局范围内可被访问
default(空) 只能被相同包的其它类访问 protected 3.可以被不同包的子类访问
abstract 抽象类, 不能创建实例, 只能作为父类 default(空) 2.可被相同包的其它类访问
final 将无法被作为父类 private 1.只能在当前类内部被访问
成员变量([1234] [~5] [~6]) [1] static 无此修饰, 则只能通过实例来调用
public 4.全局范围内可被访问 abstract 含抽象方法的类只能被定义成抽象类
protected 3.可以被不同包的子类访问 final 子类不允许覆盖父类的final方法
default(空) 2.可被相同包的其它类访问 构造器(没有返回值声明)
private 1.只能在当前类内部被访问(常) public 4.全局范围内可被访问(常)
[1] static 通过其修饰, 可通过类或实例调用 protected 3.可以被不同包的子类访问
final 不允许为final变量重新赋值 default(空) 2.可被相同包的其它类访问
初始化块{} (在执行构造器之前执行) private 1.只能在当前类内部被访问
static (不能对实例变量初始化)在类初始化阶段执行, 而不是创建对象时执行. private修饰此类所有构造器, 子类将无法调用该类构造器, 从而无法继承. 此类将不能直接创建实例, 但可通过创建一个(public static 类 方法)来返回实例并加以控制(P174)
default(空)
static修饰的方法中不能使用this引用, 所以static修饰的方法不能访问不使用static修饰的普通成员
内部类([1234] [~5] [~67])

final修饰的成员变量必须显式地指定初始值.

(1.类变量: 必须在静态初始化模块中或声明该类变量时指定初始值;

2.实例变量: 必须在非静态初始化模块、声明该实例变量或构造器中指定初始值)

public 4.全局范围内可被访问
protected 3.可以被外部类不同包的子类访问
default(空) 2.可被外部类相同包的其它类访问
private 1.只能在当前外部类内部被访问
static 非静态内部类不能拥有静态成员 final修饰局部变量可以在声明时指定, 也可以在后面的代码中赋初始值, 但只能一次.
abstract 抽象类, 不能创建实例, 只能作为父类
final 将无法被作为父类 final修饰形参, 形参会在调用该方法时由系统根据传入的参数来完成初始化, 因此不能被赋值
接口里定义内部类默认使用public static修饰
局部内部类(方法中定义)不能使用访问控制修饰符 final 修饰引用变量时只保证变量引用的地址不变
所有局部变量不能使用static修饰 abstract修饰的类只能被继承abstract不能和static/private同时修饰某个方法
匿名内部类: new 实现接口() | 父类构造器(实参) {}
匿名内部类适合创建那种只需要使用一次的类 abstract修饰的方法被定义时没有{}, 只定义不实现abstract修饰的方法必须由子类提供实现(重写)
J8之前匿名/局部内部类只能访问final局部变量J8会自动为其访问的局部变量使用final修饰
枚举类enum(与class, interface地位相同)
    继承 可以实现一个或多个接口
    默认继承java.lang.Enum而不是Object,因此枚举类不能显示的继承其它父类
    Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
    使用enume定义、非抽象的枚举类默认使用final
    构造器 只能使用private(可省略)访问控制符
    枚举类的实例必须在枚举类第一行显示列出(‘,’隔开), 否则这个枚举类永远都不能产生实例. 列出这些实例时, 系统会自动添加public static final修饰, 无需程序员显示添加.
    values()方法 可方便的遍历所有枚举值

3. 接口(定义多个类共同的公共行为规范)

[public | 空] interface 接口名 extends 父接口1, 父接口2, ...  (与class不同, 接口支持多继承)
一个Java源文件最多只能有一个public接口, 源文件的主文件名必须与该接口一致
接口里的成员都是public访问权限, 修饰符可省略(系统自动指定), 指定的话只能使用public
成员变量 只能是静态常量. 总是使用public static final来修饰(可省略, 系统自动使用)
方法 抽象实例方法 总是使用public abstract来修饰(可省略), 没有方法体
类方法(J8) 需要使用static修饰, 不能使用default修饰
默认方法(J8) 需要使用default修饰, 不能使用static修饰
内部类 内部接口, 枚举. 总是使用public static来修饰(可省略)
[修饰符] class 类名[ extends 父类] implements 接口1, 接口2, ... (接口的实现)
实现接口方法 只能用public修饰, 因为子类重写父类方法时访问权限必须更大或相等

以上是关于java--面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

JAVA方法的定义

java 为啥要实现 function?

Java 封装

Java 封装

Java 封装