解释抽象代码

时间:2013-11-07 06:08:46

标签: java abstract

我对抽象的工作感到困惑。我读过它们被用于其他类继承并使程序保持一致。但是我在教程中导入的抽象类可以接受值的方法。 (似乎)我认为他们不能给出价值?是否有任何教程可以告诉我如何为抽象类提供如下所示的值?我导入的类是GraphicsDevice和GraphicsEnvironment。

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;

public class Screenz {

GraphicsDevice videoCard;
GraphicsEnvironment env;

public Screenz() {
    env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    videoCard = env.getDefaultScreenDevice();
   }
 }

3 个答案:

答案 0 :(得分:1)

一个类的成员fns(方法)可以是

1)正常方法(完全定义)

2)抽象方法(未定义)。

考虑类的层次结构。 例如

class Vehicle{}
       class AirPlane extends Vehicle{}
       class Train extends Vehicle{}
       class Car extends Vehicle{}
       class Bike extends Vehicle{}

可以很好理解所有的 子类是“车辆类型”。 通常每种类型的车辆都有 “start()”方法。

但是在技术上开始不同了 儿童类车辆需要不同 start()的逻辑(代码)。

以上要求可以轻松实现 通过方法覆盖。

(回想一下方法覆盖意味着 重新定义中的基类方法 派生类保持方法 签名完全相同。)

专注于

1)以上定义的部分 (...重新定义基类方法....) 它已经反映了基类 有那种方法。 在类车辆的情况下,这是不可能的 定义方法start()

2)每个子类必须覆盖 方法。 (实际上,覆盖是可选的 为了一个孩子班。)

  

Finally one can say that the case is
    1) Method reqd
    2) Parent cannot define it
    3) Child must override it

以上所有要求均由“抽象方法和抽象类”来实现。

Abstract methods是仅具有声明(仅限签名)且无定义(无正文)的方法。

如果一个类包含抽象方法 然后必须将该类声明为 抽象类。

默认情况下,摘要不可用 因为抽象它不能 被实例化。 摘要只能被继承和使用。

作为一个抽象类继承了孩子 class获取抽象方法声明 来自父类,因此成为 摘要本身。

如果子类overrides传入 abstract method然后它的抽象性是 清除后仍可使用。

abstract class Vehicle
{
  int x;
  void demo()
  {
   System.out.println("Something that is good for parent and child both");
  }
  abstract void start(); //abstract method
}

class AirPlane extends Vehicle
{
  void start()
  {
    System.out.println("Start of AirPlane");
  }
}

class Car extends Vehicle
{
  void start()
  {
    System.out.println("Start of Car");
  }
}

class AbstractDemo
{
 public static void main(String args[])
 {
   Vehicle v ;
   //v = new AirPlane();   
   v = new Car();   
   v.start();//run time bound
 }
}

可以定义一个抽象类 没有任何抽象方法。

抽象类可能有 构造函数,成员变量,非 抽象函数等 所有这些都将由儿童班使用。

enter image description here

答案 1 :(得分:0)

无法实例化抽象类。这是他们对你所写的内容施加的主要限制。想到它们的最简单方法是“与实现的接口”。

但你可以在他们身上调用任何你想要的东西,向他们传递子类,等等。你不能做'新的AbstractFoo'。

答案 2 :(得分:0)

没有什么是“接受一种方法作为价值”。 videoCard被分配给env.getDefaultScreenDevice()方法返回的值。

高度建议阅读基本的Java教程。官方的是http://docs.oracle.com/javase/tutorial/java/index.html。 “类和对象”部分将介绍方法以及如何从它们返回值。 “接口和继承”部分将向您介绍继承。