万物皆对象
类
- 类和对象
类是一组相关属性和行为的合集, 是对一类事物描述,是抽象的、概念上的定义
对象是实际存在的该类事物的具体体现,因而也称实例(instance)
类是对象的模板,对象是类的实体 - 成员变量 vs 局部变量
成员变量 | 局部变量 | |
---|---|---|
位置 | 类中,方法外 | 方法内 |
范围 | 类中 | 方法中 |
初始化值 | 有 | 无,需先定义赋值再使用 |
内存 | 堆内存 | 栈内存 |
生命周期 | 随着对象的创建而创建,消失而消失 | 方法的调用而存在,调用完毕消失 |
- 类变量和类方法
被static修饰的成员变量时,该变量称为类变量
被static修饰的成员方法时,该变量称为类方法
public class Person {
//成员变量
private String name;
//类变量
private static Integer age;
/**
* 成员方法
*/
public void say(){
//局部变量
String name = "";
}
/**
* 类方法
*/
public static void run(){
}
}
注:
- 类方法可以访问类变量和类方法
- 类方法不能访问普通成员变量和成员方法,反之,成员方法可以直接访问类变量和类方法
- 类方法中,不能使用this
抽象类
- 抽象类
/**
* 抽象类
*/
public abstract class Person {
}
- 抽象方法
public abstract class Person {
/**
* 抽象方法
* 没有方法体的方法, abstract修饰
*/
abstract void say();
}
- 抽象类和抽象方法
- 含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法
- 抽象类存在的意义是用来被继承的,一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类
- 用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化
- 用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现
- 抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法
- 不能用final 修饰符修饰
接口
有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
一个类可以实现多个接口,接口也可以继承其它接口
- 接口的特点
用interface来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造器。
接口采用多继承机制
public interface Person {
void say();
}
面向对象的三大特征
封装、继承与多态
- 封装
适当的封装可以让代码更容易理解和维护,加强代码的安全性
final
可以修饰类,方法,变量
类: 被修饰的类不能被继承
方法: 被修饰的方法,不能被重写
变量:被修饰的变量,不能被重新赋值
权限修饰符
public: 公共的
protected: 受保护的
default: 默认的
private: 私有的
public | protected | default | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
通一包中 | √ | √ | √ | |
不同包 | √ | √ | ||
不同包的无关类 | √ |
-
继承
super和this
super : 代表父类的存储空间标识,可以理解为父类的引用
this : 当前对象的引用 -
多态
public interface test{
//抽象方法, abstract可以省略,没有方法体,供子类实现使用
public abstract void method1();
//默认方法, default修饰,不可省略,供子类调用或者子类重写
public default void method2(){
}
//静态方法, static修饰,供接口直接调用
public static void method3(){
}
//私有方法, 供接口中的默认方法或者静态方法调用
private void method4(){
}
private static void method5(){
}
}
网友评论