class 类名{}
interface 接口名{}
接口中的成员修饰符都是固定的:
成员常量:public static final
成员方法:public abstract
类和类之间是继承(extends)关系,
类和接口之间是实现(implements)关系,
接口不可以被实例化,只能有实现了接口的子类并覆盖接口中所有的抽象方法后,该子类才可以实例化,否则这个子类
依旧是一个抽象类。
接口的出现将"多继承"通过另外一种形式表现出来,即"多实现",一个类还可以在继承一个类的同时实现多个接口,避免单继承的局限性
接口是一个特殊的抽象类(纯抽象类)
接口是程序的功能扩展
接口的出现降低耦合性
耦合性:
也称为块间联系。指软件系统结构中各模块
间相互联系紧密程度的一种度量
内聚性:
也称为块内联系。指的是一个模块内部各个
元素彼此结合紧密程度的一种度量
interface T{} class T1 implements T{} class T2 implements T{} say(T t){}
接口可以用来多实现
类与接口之间是实现关系,而且类可以在继承,一个类的同时实现多个接口
接口的属性默认是常量,而且是public static final修饰的
接口中的方法一定是public abstract修饰的(public abstract可以省略不写)
接口和接口之间可以有多继承关系
接口中没有构造器
修饰java类、属性、方法的访问可见范围)
修饰符(1表示可访问) | 类内 | 包内 | 子类 | 任意位置 |
---|---|---|---|---|
public | 1 | 1 | 1 | 1 |
protected | 1 | 1 | 1 | |
default | 1 | 1 | ||
private | 1 |
private:私有的,仅仅在类的内部可见
public:公有的,任意位置可见(类内部、
同一个包下、子类和其他地方)
protected:受保护的,在同一个包中和子类中可见
default:默认的,什么都不写,在同一个包中可见
final关键字(最终的)
final是一个修饰符,可以修饰类、方法、变量
final修饰的类不可以被继承(例如:String/Math/Integer...)
final修饰的方法不可以被覆盖(重写)
final修饰的变量是一个常量,只能赋值一次,如果尝试第二次修改值,那么会编译错误
成员变量一旦被final修饰之后就是固定不变,
是所有对象能共享的资源,所以一般都会加static
一起修饰
方法的多态:方法的重载
对象的多态:父类型(父接口)的引用指向子类的对象
class Animal{} class Cat extends Animal{} Cat c = new Cat(); Animal a = new Cat();
向上转型的目的就是限制功能的使用,为了提高代码的扩展性(统一操作动物)。
向下转型的目的就是为了使用子类的特有功能
java中的instanceof是一个二元运算符,它的作用是用来判断instanceof左边的对象是否属于右边类的实例,返回一个boolean类型的结果
成员变量
成员方法(非静态的)
JavaBean指的是符合某种特定规范的Java类
特点:
两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放,
静态变量随着类的加载而存在,随着类的消失而消失
调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用,还可以被类名调用
别名不同
成员变量也叫作实例变量
静态变量也叫作类变量
数据的存储位置不同
成员变量数据存储在堆内存的对象中,所以也叫作对象的特有数据
静态变量数据存储在方法区的静态方法区中(数据共享区),所以也叫作对象的共享数据
静态变量
当分析对象中所具备的成员变量的值都是相同的,这时这个成员变量就可以被静态修饰,只要数据在对象中是不同的,那就是对象的特有数据,必须 存储在对象中,就不能定义成静态的
静态方法
方法是否用静态修饰,就参考一点,该方法的功能是否有访问到对象中的特有数据,如果有,就不能定义成静态的,如果没有,就可以定义成静态的
静态代码块
定义在类中
static{
}
构造代码块:定义在类中
{}