2016-11-16 261 views
1

我知道的OOP概念[继承,抽象,封装,多态]继承和抽象类有什么区别?

我们使用继承中的父子关系案[儿童可以拥有母公司拥有的所有功能,并可以将自身添加更多的功能基本面太]

而我们使用抽象类(在java中)为类的方法的默认实现的部分集合,它也可以通过简单的继承来实现。

看下面的例子,这使我的观点清晰。

继承:

父类

public class Parent { 

    // This method will remain same for all child classes.No need to override 
    public void abc() { 
     System.out.println("Parent here"); 
    } 

    // This methods need to be overridden from child class 
    public int getROI() { 
     return 0; 
    } 
} 

儿童类

public class Child extends Parent{ 

    @Override 
    public int getROI(){ 
     return 5; 
    } 

    public static void main(String[] args) { 
     Child child =new Child(); 
     child.abc(); 
     System.out.println(child.getROI()); 
    } 
} 

抽象类:

父类

abstract class Parent { 

    // This method will remain same for all child classes.No need to override 
    public void abc() { 
     System.out.println("Parent here"); 
    } 

    // This methods need to be implemented from child class 
    public abstract int getROI(); 
} 

儿童类

public class Child extends Parent{ 

    public int getROI(){ 
     return 5; 
    } 

    public static void main(String[] args) { 
     Child child =new Child(); 
     child.abc(); 
     System.out.println(child.getROI()); 
    } 
} 

对于上述程序O/P将是相同的。

O/P:  
Parent here 
5 

所以我认为,

继承:我们需要重写子类中的方法

抽象类:在方法名把抽象的关键词,需要实现方法子类

所以继承和抽象类是一样的不管抽象关键字因此,我们可以使用继承来实现抽象类,这里只是方法签名更改类(这是我的信念)。

有什么重要区别?

+0

对不起,我忘了提到抽象类,在这里我将讲述抽象类和继承之间的主要区别 –

回答

1

通过继承,您不需要重写方法。在不覆盖getROIChild的情况下,您仍然可以拨打new Child().getROI()并获得0作为响应。

如果另一方面一个方法是抽象的,它将需要由孩子实现,因为没有默认实现。

3

继承是用于继承属性,并有一些属性。

摘要是限制被实例化。

例如:
让我们带车辆和车辆部分。但汽车本身是非常抽象的,并不完整。所以我们想要Vehicle类抽象,因为我们不想直接实例化它。汽车比汽车更有意义,汽车是汽车。所以汽车延伸车辆,它不是抽象的。

abstract class Vehicle{ 
    String name; 
} 

abstract class VehiclePart{ 
    String name; 
    Date expiry; 
} 

class Car extends Vehicle{ 
    List<VehicleParts> parts; 
} 

class RacingCar extends Vehicle{ 

} 

class Gear extends VehiclePart{ 
    int numOfGears; 
} 

继承:我们需要覆盖的子类

都能跟得上的方法。在上面的例子中,你可以看到Car继承了Vehicle这样的属性。重写是可选的。像RacingCar一样可以覆盖Car的方法并使其有点自定义。但基本上它从基类获得(继承)一些属性。就像一辆汽车的所有基本属性都在Car中,而不是在RacingCar中。 RacingCar将具有特定的属性。


抽象类:放入方法名抽象的关键词,需要 实现子类

都能跟得上的方法。这只是限制其实例化。例如。我们不想实例化Vehicle对象,因为它没有意义。车辆必须是汽车,公共汽车等等。它不能只是一辆车。所以我们把抽象和限制实例化。

0

抽象类意味着你不能直接实例化它。

new Parent() 

是不允许的。

抽象方法需要在扩展类中实现。