【Java复习记录】面向对象(下)
一、概述
1.static
1)属性:由static修饰的是静态变量/类变量,非静态的叫实例变量,类的所有对象共用这个静态变量
比如,Chinese类中的静态变量static nation=China,所有Chinese对象的民族都是China
2)方法:静态方法中只可以调用静态的属性或方法
(也因此不可以用this,super)
3)是否定义为static的
属性:例如Chinese里的nation=China这种共享且不变的
方法:操作静态属性的方法
工具类中的方法习惯static(Math、Arrays。。。
2.单例设计模式:就是指一个类只有一个对象
1)懒汉式
a.私有化构造器(才不能被调用创建多个对象
b.在类中声明类的对象,不创建(也是private的才不会被调用private class i = null ;
c.返回对象的方法
d.对象也是静态(静态方法return静态对象
2)饿汉式
a.私有化构造器(才不能被调用创建多个对象
b.在类中创建类的对象(也是private的才不会被调用
private class i = new class();
c.提供公共的静态方法,返回类的对象(只有当方法是静态的才能通过类来调,不用在测试类中创建对象
d.对象也是静态(静态方法return静态对象
3.main方法
4.代码块
6.属性赋值与先后顺序
7.final
1)修饰一个类:不能被继承
2)修饰一个方法:不能被重写
3)修饰一个属性:变量不能再改变
4)属性赋值:
a. 显式初始化final int i =1;
b.代码块 / 构造器中初始化:final int i;
代码块 / 构造器 { i = 1;}
5)修饰局部变量
a.修饰方法内部变量final int i =1;
b.修饰形参public void show(final int i ){…}方法内一般只能输出,不能修改参数了,就是一个常量了
6)static final修饰属性:全局常量
8.抽象类
子类设计得特别具体,父类只有一些必要的共有特征,设计得非常抽象
(父类不能实例化,用子类实例化)
1)abstract修饰类:抽象类不能实例化
2)abstract修饰方法:抽象方法没有方法体public abstract void eat();
3)包含抽象方法的类一定是抽象类(抽象方法没有方法体不能执行,不能被调用,那么他所存在的类必须是抽象类,就不能造对象来调用抽象方法)
4)若上条中父类是抽象类,那么子类会继承父类的抽象方法,所以:
要么重写父类中的抽象方法
要么子类也是抽象类
5)应用:比如要求计算几何图形的面积等等,但设计类时无法知道具体图形,也无法写计算方法,这就可以将计算方法写成抽象方法,(同时父类写成抽象类),没有方法体,在写子类时再重写具体计算方法
6)不能修饰static方法,在重写
7)!!抽象类的匿名子类!!!!!!!!!
8)模板方法设计模式
9.接口:多继承
1)接口和类是并列的结构,定义类中的成员,定义接口中的成员
(JDK7)
2)接口中只有全局常量和抽象方法
a.全局常量Public static final int MAX;可以只写int MAX;
b.抽象方法public abstract void fly();可以省略为void fly();
3)不能定义构造器,不能实例化,抽象方法有构造器,是为了子类可以实例化
interview:抽象类与接口有那些不同!!!!
4)接口中是抽象方法,所以类implements后,要么重写,要么写成抽象类
5)接口可以多继承,先写继承再写接口
class A extends B inteface C,D{…}
6)类与类——继承
类与接口——实现关系
接口与接口——继承(可以多继承)所以也是extends
interface A {。。。。。}
interface B {。。。。。}
interface C extends A,B {。。。。。}
7)接口的使用体现多态性
接口和抽象类都不能实例化,那么当一个方法的形参写成抽象类或者声明成一个接口,就要用到多态,来提供他的子类或者实现类
8)接口可以看作一种规范
9)创建接口的(非)匿名实现类的(非)匿名对象
(匿名对象new 接口();)
(JDK8)
10)除了全局常量和抽象方法外,还可以定义静态方法、默认方法
public static void method1(){…}
public default void method2(){…}(public可以省略,不代表权限修饰符变成default)
11)接口中定义的静态方法,只能通过接口来调用,不能在类实现了接口后,通过创建类的对象来调用接口中的static方法,也不能用类来调
12)通过创建类的对象来调用
13)