文章目录
1、访问修饰符的区别
private:在同类中进行访问
默认不写:同包不同类中
protected:不同包但是具有继承关系的类中
public:同一个项目中均可访问
2、接口
是一种规范,存放抽象方法的集合,并不提供功能的实现,体现了规范和功能相分离,对功能与规范进行解耦,提高代码的独立性。
接口在结构上与类相似,是使用interface关键字声明的
public interface Usb{}
接口中可以存在的东西:
成员变量:默认有public static final修饰,所以必须要有初始值,接口名.变量名
静态方法:接口名.方法名
抽象方法:默认有public abstract
没有构造方法(也就没有对象),没有普通方法
类与接口的关系:实现
关键字 implements 表示
public class B implements A{}
一个类可以同时实现多个接口,如果该类还包括继承,继承要写在最前面
类与类的关系:继承(单继承 多重继承)
接口与接口的关系:
多继承:一个接口可同时继承多个接口(可以同时有多个爸爸)
多重继承:被继承的接口还能够继续继承(儿子还能够有儿子)
3、多态
编译时类型与运行时类型不一致的情况称为多态。
口诀:编译看左边,运行看右边。(针对的是普通方法,静态方法还是要看编译时类型)
父类在左边,子类在右边
Animal a = new person();
多态存在的情况:子类与父类、实现类与接口
作用:可以屏蔽子类之间大的差异性,提高代码的可扩展性
引用数据类型的转换:与基本数据类型转换类似
强转类型 变量名 = (强转类型)对象名;
强转时要注意对类型的判断:
1、a instanceof A:a表示对象名 A表示强转类名 结果为布尔值
if(父类变量 instanceof 子类类型1){
//强制类型转换
子类类型1 子类变量 = (子类类型1)父类变量;
//现在就可以调用子类特有方法
子类变量.子类特有方法(...);
}else if(父类变量 instanceof 子类类型2){
//强制类型转换
子类类型2 子类变量 = (子类类型2)父类变量;
//现在就可以调用子类特有方法
子类变量.子类特有方法(...);
}
2、通过获取运行时
getclass:对象调用Object中getclass时获取的真正的类型
class属性:类名.class 获得该类真正运行时的类型