——>封装,继承,多态 Encapsulation 封装
1:私有化, 信息隐藏; 2:暴露一个或者少量的接口给外部访问;
封装是对一个类而言,继承和多态是相对多个对象而言;1:“is a”的关系,子类是父类的一种; 2: extends 关键字 class Manager extends Employee{}; 3 : 单继承
实现多态的三个条件:
① :继承的存在(继承是多态的基础,没有继承就没有多态); ② :子类重写父类的方法(多态下调用子类重写后的方法); ③ :父类引用变量指向子类对象(子类到父类的类型转换);
将一个父类的引用指向一个子类对象,称为向上转型; 将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。 引用数据类型之间强制转换时是还原子类的真实面目。
① :重写方法和被重写方法必须具有相同的方法名; ② :重写方法和被重写方法必须具有相同的参数列表; ③ :重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类; ④ :重写方法不能缩小被重写方法的访问权限;
在一个构造方法中不允许同时出现使用this和super语句调用构造方法(否则就有两条第一条语句)。 在类方法中不允许出现this或super关键字; 在实例方法中,this和super语句不要求是第一条语句,可以共存。
① :抽象类和抽象方法都通过abstract关键字来修饰; ② :抽象类不能实例化。 ③ :抽象方法只有方法声明,没有方法实现。
Abstract可以用来修饰类和方法,但不能用来修饰属性和构造方法。 抽象类有构造方法。
接口的基础知识
接口是一套规范,满足这个规范的设备,就可以将他们组装到一起,从而实现该设备的功能。软件中,接口同样是一种规范和标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。
接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念也是不同的,抽象类利于代码复用,接口利于代码的扩展和维护。
语法:
修饰符 Interface 接口名 extends 父接口1,父接口2,…….{ //常量定义 //方法定义 }Class 类名 extends 父类名 implements 接口1,接口2…..{ //类成员 }
说明
① :接口的命名规则与类名相同。如果是public,则该接口在整个项目中可见,如果省略,则该接口只在当前包可见; ② :接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,常量必须在定义时指定初始值。 ③ :接口中所有方法都是抽象方法。接口中方法都会自动用public abstract修饰。 ④ :和抽象类一样,接口也不能实例化,接口中不能有构造方法。 ⑤ :接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。 ⑥ :接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
一个类只能有一个直接父类,但可以通过implements实现多个接口。当类在继承父类的同时又实现了多个接口时,extends关键字必须位于implements关键字之前。
接口表示一种能力。一个类实现了某个接口,就表示这个类具备了某种能力,程序中一个类可以实现多个接口。
接口不仅弥补了JAVA只支持单继承的缺点,还利于代码的扩展和维护。接口类似于一个组件,需要时可以自由组装。
接口和抽象类的区别在于:抽象类利于代码复用,接口利于代码维护。
接口表示一种约定。接口体现了约定和实现相分离的原则,通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。
面向接口编程就意味着:开发系统时,主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统。
怎样抽象出接口呢?
① :一种是用在层和层之间的调用。层和层之间最忌讳耦合度过高或修改过于频繁。 ② :一种是使用在那些不稳定的部分上。 良好的接口定义一定是来自于需求的,它绝对不是程序员绞尽脑汁想出来的。
