第一天、面向对象的静态与继承
static:静态
static修饰成员变量
-
static : 叫静态,可以修饰成员变量,成员方法
-
类变量 : 有static修饰 特点 : 属于类,只有一份,会被类的全部对象共享
访问方法 : 类名 . 类变量(推荐) 对象名 . 类变量(不推荐)
-
实例变量(对象的变量) : 无static修饰 特点 : 属于每个对象
访问方法 : 对象 . 实例变量
static修饰成员变量的应用场景
-
应用场景 某个数据只需要一份,且希望能够被多个对象共享
static修饰成员方法
-
类方法 : 有static修饰 属于类
访问方法 : 类名 . 类方法(推荐) 对象名 . 类方法(不推荐)
-
实例方法 : 无static修饰 属于对象
访问方法 : 对象 . 实例方法
补充知识 : 搞懂main方法
Java程序的入口方法, 被static修饰, 是一个静态方法 JVM在运行类的时候, 会自动调用: 类名.main(args); args: main方法的形参, jvm在调用main方法的时候是可以给main方法传参数的
static修饰成员方法的应用场景
-
场景 作为工具类
-
工具类定义 : 就是一些完整功能,经常使用方法所在类
-
特点 : 类方法可以不创建对象,直接调用,使用方便,节省内存
实例方法需要创建对象调用,会浪费内存
-
使用建议 : 工具类不需要创建对象,将工具类的构造器私有化
static的注意事项
-
类方法中可以直接访问类成员,不可以直接访问实例成员
-
实例方法中既可以直接访问类成员,也可以直接访问实例成员
-
实例方法中可以出现this关键字,类方法中不可以出现this关键字的
总结 : 1. 静态方法只能询问静态内容,实例方法可以访问任何内容
2.静态方法不能用this
static的应用知识:代码块
-
概述 代码块是类的5大成分之一(成员变量 , 构造器 , 方法 , 代码块 , 内部类)
-
代码块分为两种 :
-
静态代码块:
格式 : static { }
特点 : 类加载时自动执行,由于类只会加载一次,所以静态代码也会执行一次
作用 : 完成类的初始化,例如:对类变量的初始化赋值
-
实例代码块(了解):
格式 : { }
特点 : 每次创建对象时,执行实例代码块,并在构造器前执行
作用 : 和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值
整体总结
-
面向对象特征之:继承
继承快速入门
-
继承定义 : 就是使用extends 关键字,让一个类和另一个类建立起一种父子关系
特点 : 子类可以继承父类非私有成员
格式 : public class A //父类
public class B extends A{ } //B 为子类
-
怎么创建对象 : 带继承关系的类,Java会用类和其父类这多张设计图来一起创建类的对象
-
可以访问那些成员 : 由子父类共用决定 设计图暴露什么成员对象就可以直接访问什么成员
继承的好处
减少了重复代码的编写,提高了代码的复用性
继承相关的注意事项
-
权限修饰符
-
作用 : 用来修饰类中的成员,以限制被修饰成员能够被访问的范围
-
修饰符分类和作用 :
private 只能本类(本类)
缺省 本类,同一个包中的类(本类,本包)
protected 本类,同一个包中的类,子孙类(本类,本包类,本后代)
public 任意位置(任意)
private < 缺省 < protected < public
-
-
单继承
-
Java是单继承的 : 一个类只能继承一个直接父类;Java中的类不支持多继承,但是支持多层继承
-
Object类是Java中所有类的祖宗
-
-
方法重写
-
定义 : 子类写了一个方法名称,形参列表与父类某个方法一样的方法区覆盖父类的方法
-
注意事项 : 建议加上:@Override注解,可以校验重写是否正确,同时可读性好!
子类重写父类方法时,访问权限必须大于或者等于父类被重写的方法的权限!
重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小!
私有方法、静态方法不能被重写!
-
应用场景 : 当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写
-
-
子类中访问其他成员的特点
-
访问原则 : (就近原则)
先子类局部范围找
然后子类成员范围找
然后父类成员范围找,如果父类范围还没有找到则报错
-
重名成员的使用 : super . 父类成员变量/父类成员方法
-
-
子类构造器的特点
-
特点 : 子类的全部构造器,都先调用父类的构造器,再执行自己
-
如何实现调用父类 : 默认情况下,子类全部构造器的第一行代码都是 super() (写不写都有) ,它会调用父类的无参数构造器
如果父类没有无参数构造器,则我们必须在子类构造器的第一行手写super(….),指定去调用父类的有参数构造器
-
应用场景 : 在子类构造器中调用父类的有参构造器给父类传递参数来完成父类对象的初始化
-
-
补充知识
-
this(---)调用兄弟构造器 :
任意类的构造器中,是可以通过this去调用该类的其他构造器
-
this(---)和super(---)使用注意事项 :
this(…) 、super(…) 都只能放在构造器的第一行,因此,有了this(…)就不能写super(…)了,反之亦然
-
-