面向对象
面向对象,可以记录生活中的点点滴滴,强调对象,指挥者,将功能封装进对象,强调具备了功能的对象。
面向过程,就是强调的是功能和行为,也就是执行者。
成员变量的区别
在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
局部变量不被对象所调用。成员变量被对象调用。
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
面向对象的三大特性
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
继承:
继承特点
Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)
有些语言是支持多继承,格式:extends 类1,类2,...
Java支持多层继承(继承体系)
继承的注意事项
子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
不要为了部分功能而去继承
什么时候使用继承
继承其实体现的是一种关系:"is a"。
多态
事物存在的多种形态
多态前提
要有继承关系。
要有方法重写。
要有父类引用指向子类对象。
this关键字特点
this是用来区分成员变量和局部变量重名的。this调用的是成员变量。也可调用成员方法。
通过this调用构造方法,必须放在第一句
this代表当前对象的引用。哪个对象调用他所在的函数他就代表那个对象
this和super的使用
调用成员变量
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
static的注意事项
在静态方法中是没有this关键字的
如何理解呢?------------这的活用!
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
简单记:
静态只能访问静态。
静态变量和成员变量的区别
静态变量也叫类变量 成员变量也叫对象变量
所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
方法重写注意事项
父类中私有方法不能被重写,因为父类私有方法子类根本就无法继承
子类重写父类方法时,访问权限不能更低
最好就一致
父类静态方法,子类也必须通过静态方法进行重写
其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)
子类重写父类方法的时候,最好声明一模一样。
Override和Overload的区别?
overload可以改变返回值类型,只看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法。
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值无关。
final关键字
final修饰特点
修饰类,类不能被继承
修饰变量,变量就变成了常量,只能被赋值一次
修饰方法,方法不能被重写
抽象类特点
抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名 {}
public abstract void eat();
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
接口特点
接口用关键字interface表示
interface 接口名 {}
类实现接口用implements表示
class 类名 implements 接口名 {}
接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。
抽象类和接口的区别
成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。