修饰符:
static: ( 课堂代码:StaticTest.java)
静态的 ,能修饰属性,能修饰方法,能修饰代码块
静态属性:
Animal{
String name;
int age;
static int count; //类变量
}
Animal.count=5; 使用方法,用类名调用
本类的所有对象都使用这个变量,全类唯一,全类公有,类加载的时候初始化
静态方法:
public static void addCount(){}
Animal.addCount();
注意:在静态方法内部中不能访问其它非静态成员,非静态方法可以访问静态成员
静态代码块:不包含在任何方法内部。
静态初始化代码块在类加载的时候运行,所以只执行一次。
静态初始化代码块和静态方法一样也不能访问非静态成员。
final:
修饰变量(实例变量,局部变量,类变量):final修饰变量会使变量成为常量,一旦赋值,不能改变,表示属性的值是不可变的
对于实例变量是一个final的,要么在初始化属性时赋值,要么在构造方法中赋值,
只能一次且还不能不赋值,即必须在构造对象后有值
若修饰类变量,即若是final static的类常量,必须在类加载后有值,
即要么在初始化属性或者要么在静态初始化代码块中赋值
修饰方法:表示这个方法是最终的方法,不能在子类中去覆盖这个方法
修饰类:表示这个类不能被继承,不能有子类
abstract:抽象的
修饰类:抽象类不能new对象(不能实例化),抽象类不能作为运行时类型,抽象类可以是编译时类型(可以声明引用)
抽象类可以有构造方法(要被子类调用),可以有构造方法,可以有静态方不法,也可以有主方法
修饰方法:只有定义没有实现
例:abstract public void m();
注意:如果一个类中有抽象方法,这个类必须是抽象类,为了避免new对象后m()没有实例。
如果某个类没有任何抽象方法,这个类也可以定义为抽象类,即抽象类中不一定有抽象方法,可以有非抽象方法。
抽象方法是留给子类实现的,子类必须实现抽象方法,否则也不能new对象
abstract 与 final 不能同时出现
abstract 与 static 也不能同时出现
abstract 与 private 也不能同时出现
interface(接口):
接口在本质上是一个特殊的抽象类,在语法上和类有区别。
属性:接口中的所有属性都是公开静态常量
方法:接口中所有方法都是公开抽象方法
构造方法:接口没有构造方法
定义接口:public interface Mobile{
public static final int a;//若写成int a; 不给任何修饰的话,系统会默认为它是public static final的,所以在定义时必须赋值。
public void move();
}
implements 实现,变相的继承
public class Animal implements Mobile{
}
接口与接口之间可以有继承关系,允许多继承。
一个类在继承另一个类的同时可以实现接口,并且可实现多个接口
类和接口之间可以定义实现关系,逻辑上相当于接口是实现类的父类型,
当我们用类去实现接口时,如果不希望实现类是抽象类的话,那么就要实现接口中定义的所有的方法
接口和多态配合使用,接口不能构造对象,可以作为引用类型(编译时类型),只能调用接口中定义的方法,运行时找接口实现类中实现的方法
如果对接口类型的引用调用方法,调用的一定是接口实现中的方法
所谓接口对象指的是接口实现类的对象
子 父
继承
类 -----------类(单个)
extends
实现
类------------接口(多个)
implements
多继承
接口----------接口(多个)
extends
接口的使用:1、功能模块 2、标准,一个接口就是一个标准,把制定标准、使用标准、和实现标准分开,标准的使用者和标准的实现者通过标准间接发生联系。
访问权限:编译时概念。
Object:
boolean equals(Object obj):判断两个对象内容是否“相等”。
==(双等号):判断的是地址
.equals :判断的是内容
写equals方法时:
1、自反性判断 if(this==obj) return true;
2、判断是否为null if(obj==null) return false;
3、判断类型是否兼容 if(!(obj instanceof 类)) return false; 或 if(this.getClass()!=obj.getClass()) return false;
4、强制类型转换,判断每一个属性:简单类型用==,对象类型用.equals