--------- Java培训、Android培训、iOS培训、.Net培训
期待与您交流! ------
一,抽象类:
1,抽象类的产生:
比如犬类事务,都具备吼叫的功能,但是叫声却不一样,叫声则是由具体的子类来赋予的,那么这时功能不具体,但是却相似的功能,需要在父类中标示出来,则通过java中关键字:abstact(抽象)。
abstract void 吼叫();//抽象函数,需要abstract修饰,并用分号结束。定义了抽象函数的类也必须用abstract修饰。被abstract修饰的则称为抽象类!
抽象类:
描述事物是,没有足够的信息描述一个事物,功能不确定,则可以使用抽象类。此事务则就是抽象事务。在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.
2,抽象类的特点:
1.抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在被abstract修饰的类中。
2.抽象类不可以创建实例,原因:调用抽象方法没有意义。
3.只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。否则该子类还是一个抽象类。
4.之所以继承,更多的是在思想,是面对共性类型操作才会更简单。
代码实例:
//abstract例子: abstract class Employee { private String name; private String id; private double pay; /** 构造一个员工对象,一初始化就具备着三个属性。 */ public Employee(String name,String id,double pay) { this.name = name; this.id = id; this.pay = pay; } /** 工作行为。 */ public abstract void work(); } //具体的子类:程序员。 class Programmer extends Employee { public Programmer(String name,String id,double pay) { super(name,id,pay); } public void work() { System.out.println("code...."); } } //具体的子类:经理。 class Manager extends Employee { //特有属性。 private double bonus; public Manager(String name,String id,double pay,double bonus) { super(name,id,pay); this.bonus = bonus; } public void work() { System.out.println("manage"); } }
二,接口:
1,接口的由来:
抽象类中可以定义抽象方法的,当一个抽象类中的方法全是抽象的,这时,可以通过另一种特殊的形式来体现。可以将该类定义为接口。 接口里的方法只能是抽象的。
2,接口中成员的定义格式:
1,定义变量:但是变量必须有固定的修饰符 public static final所以接口中的变量也称之为常量。(可以省略,编译器会自动加上)。
2,定义方法:方法也有固定的修饰符:public abstract 接口里的成员都是公共的。(可以领略,编译器会自动加上)。
3,接口的特点:
1.接口不可以创建对象,
2.子类必须要覆盖掉接口中的所有的抽象方法后,子类才可以实例化。否则子类也会是一个抽象类。
接口的子类:子类与子类的关系是继承,类与接口之间的关系是实现,通过关键字:implements
class DemoImpl implements demo{ //重写接口中的所有方法:code.... }
4,接口最重要的体现:
多继承弊端:当多个父类有相同功能时,子类调用会产生不确定性。
解决多继承的弊端,将多继承这种机制在java中通过多实现完成。class C
implements A,B{}//多实现,利于多态化。
原因在于:多继承父类中的功能有主体,而导致调用运行时,不确定哪个主体内容 ,多实现接口中没有方法体,需要有子类来明确。
如果子类想要继续扩展其他类中的功能呢?这是可通过实现接口来完成。
5,接口的好处:
1,接口的出现对功能实现了扩展,2,接口的出现定义了规则,3,接口的出现降低了耦合性(解耦)。说明有两方,一方在使用规则(如笔记本电脑),一方在实现这个规则(笔记本的外围设备)。接口的出现避免了单继承的局限性,父类中定义的事物的基本功能,接口中定义的事物的扩展功能。
2 , 接口可支持多继承,指的是接口与接口之间,支持多继承!,
三,细节:
1,没有抽象方法的抽象类的由来:
为了使用接口中的部分方法,而覆盖了全部的方法,而且每一个子类都要这么做,复用性差。 解决:将这些不用的方法单独抽取到一个独立的类中,让这个类去实现接口,并覆盖接口中的所有方法。但这个类不知道具体的实现内容,所以只能为了后期的子类创建对象方便而进行空实现,而这时,这个类创建就像就没有意义,因为其主体内没有方法内容,这个类创建对象就不需要,则可以直接将其抽象化。这就是没有抽象方法的抽象类的存在意义。
2,接口与抽象类的区别:
接口与抽象类是有很大区别,抽象类可以通过接口定义但接口比抽象类具有更多功能。
1,抽象类是描述事物的基本功能,可以定义非抽象的方法,
接口中定义的只能是抽象方法。
2,类与类之间是继承关系 is a关系。
类与接口之间是实现关系 like a关系。接口只可以定义static final成员变量。
3,抽象类里面可以有非抽象方法,但接口里只能有抽象方法
。
4 ,接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。