面向对象的Java点和方法继承

时间:2015-10-05 06:03:04

标签: java object inheritance

所以现在我有几个课程:

档案1

package simplestart;

import simplegui.SimpleGUI;
public class Point {
    int x, y;
    public Point(int a, int b){
        this.x = a;
        this.y = b;
    }
    public void drawLine(Object data, SimpleGUI sg){    
        Node current = new Node(data);     
    }
    public int getX(){
        return x;
    }
    @Override
    public String toString(){
        return(x + " " + y);
    }
}

文件2

package simplestart;
import simplegui.SimpleGUI;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SimpleStart {
    public static void main(String[] args){
        int x, y;
        SimpleGUI sg = new SimpleGUI();
        sg.setTitle("Shape Abstraction");
        sg.centerGUIonScreen();
        LinkedList l1 = new LinkedList();
        File fl = new File("shapelist.txt");
        Scanner scan = new Scanner(fl);
        while(scan.hasNext()){
            x = scan.nextInt();
            y = scan.nextInt();
            Point p = new Point(x, y);
            l1.insertFirst(p);
        }
        l1.traverseList(l1, sg);
        l1.abstractList(l1, sg);
    }
}

文件3

package simplestart;
public class Node {
    Object data;
    Node next;

    public Node(Object data){
        this.data = data;
    }
}

档案4

package simplestart;

import simplegui.SimpleGUI;

public class LinkedList {
    Node START;
    public LinkedList(){
        START = null;
    }
    public void insertFirst(Object data){
        Node n = new Node(data);
        n.next = START;
        START = n;
    }

    public void traverseList(Object data, SimpleGUI sg){
        Node current = START;
        int x, y, ex, ey;
        while(current != null){        
            //This is where I'm trying to pull the data from Class Point
            //The error that appears is can't find symbol int x
            x = current.data.x;
            y = current.data.y;
            ex = current.next.data.x; 
            ey = current.next.data.y;
            sg.drawLine(x, y, ex, ey);
            //toString() is an override method in Class Point
            System.out.println(current.data);
            //However, this doesn't work... which I don't get cause it's also a method in Class Point like toString()
            current = current.next;   
        }
    }
    public void abstractList(Object data, SimpleGUI sg){
        Node current = START;
        Node temp = START;
        current = current.next;
        int lp, pr, rl, s;
        while(current.next != null){
            lp = current.next.data.x ­ current.data.x;
            pr = current.next.next.data.x ­ current.next.data.x;
            rl = current.next.next.data.x ­ current.data.x;
            s = lp + pr ­ rl;
            current.next.data = s;
            temp = current.next;
            current = current.next.next;
        }
    }
}

基本上我在文件1中指出了一点,将这些点以文件3中的节点形式添加到文件2中的链接列表中,并在文件4中迭代它们。但是,当current.data应该是每个节点时有点,我无法访问方法“getX()”甚至current.data.x。我很好奇为什么会这样,并且不能为我的生活弄清楚。任何帮助都是非常必要的!

3 个答案:

答案 0 :(得分:1)

Node中的数据类型为Object,它不会在任何地方输入类型为Point。这是Object类中的方法toString(),但没有getX()方法。

答案 1 :(得分:1)

您无法访问数据点的原因是,data的{​​{1}}属性属于Node类型。

如果您想获得该属性,例如

  • 将属性转换为Object

    Point

  • 介绍您自己的((Point)current.data).x类,该类具有Node类型的属性(也可以是通用的)

Andy指出,我也强烈建议您实现自己的节点类。这样做有一个好处,那就是你将拥有语言支持而且你不需要进行转换,如果你的节点数据类型发生变化,你就不会遇到运行时异常 - 编译器会告诉你。

答案 2 :(得分:0)

您没有在/** * Class to get the data for the UI */ package com.shop.web; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import com.shop.data.Item; import com.shop.data.Orders; import com.shop.hibernate.application.ManageOrder; /** * @author svalsalan * */ @ManagedBean(name = "itemDataBean") @SessionScoped public class ItemDataBean { private List<Item> MenItems = new ArrayList<Item>(); private List<Item> WomenItems = new ArrayList<Item>(); private List<Item> Items = new ArrayList<Item>(); public List<String> selectedItems = new ArrayList<String>(); public List<String> selectedMenItems = new ArrayList<String>(); public List<String> selectedWomenItems = new ArrayList<String>(); public List<Item> userselectedItems = new ArrayList<Item>(); // public List<Item> selectedDataItems = new ArrayList<Item>(); public Item selectedDataitem; // Map<Item, Integer> Quantity = new HashMap<Item, Integer>(); List<Item> Cartlist = new ArrayList<Item>(); Item Shirt; public List<Item> getItems() { Items = new ArrayList<Item>(); // set an initial value for the price // Create items Shirt = new Item(1, "Shirt", 100, "S"); Shirt.setItemid(1); Item tshirt = new Item(1, "T-Shirt", 200, "M"); tshirt.setItemid(2); Item jean = new Item(1, "Jeans", 300, "L"); jean.setItemid(3); Item Dress = new Item(0, "Dress", 300, "S"); Dress.setItemid(4); Item Tops = new Item(0, "Tops", 100, "S"); Tops.setItemid(5); Item skirt = new Item(0, "Skirt", 200, "S"); skirt.setItemid(6); // Add them to the list Items.add(0, Shirt); Items.add(1, tshirt); Items.add(2, jean); Items.add(3, Dress); Items.add(4, Tops); Items.add(5, skirt); return Items; } /** * @return the menItems */ public List<Item> getMenItems() { MenItems.clear(); getItems(); for (int i = 0; i < Items.size(); i++) { if (Items.get(i).getCategoryId() == 1) { MenItems.add(Items.get(i)); } } return MenItems; } /** * @return the womenItems */ public List<Item> getWomenItems() { WomenItems.clear(); getItems(); for (int i = 0; i < Items.size(); i++) { if (Items.get(i).getCategoryId() != 1) { WomenItems.add(Items.get(i)); } } return WomenItems; } /** * @param menItems * the menItems to set */ public void setMenItems(List<Item> menItems) { MenItems = menItems; } /** * @param womenItems * the womenItems to set */ public void setWomenItems(List<Item> womenItems) { WomenItems = womenItems; } /** * @return the items */ /** * @param items * the items to set */ public void setItems(List<Item> items) { Items = items; } public List<String> getSelectedMenItems() { return selectedMenItems; } /** * @return the selectedWomenItems */ public List<String> getSelectedWomenItems() { return selectedWomenItems; } /** * @param selectedMenItems * the selectedMenItems to set */ public void setSelectedMenItems(List<String> selectedMenItems) { this.selectedMenItems = selectedMenItems; System.out.println(selectedMenItems); } /** * @param selectedWomenItems * the selectedWomenItems to set */ public void setSelectedWomenItems(List<String> selectedWomenItems) { this.selectedWomenItems = selectedWomenItems; } /** * @return the selectedItems */ public List<String> getSelectedItems() { this.selectedItems.clear(); selectedItems.addAll(getSelectedWomenItems()); selectedItems.addAll(selectedMenItems); return selectedItems; } /** * @param selectedItems * the selectedItems to set */ public void setSelectedItems(List<String> selectedItems) { this.selectedItems = selectedItems; } /** * @return the userselectedItems */ public List<Item> getUserselectedItems() { this.userselectedItems.clear(); this.getSelectedItems(); // loop through the selectedItems array for (String str : selectedItems) { // each one item in the array, loop throug the list from // getMenItem() for (Item item : Items) { // Match the ids' and store in a different list if (str.matches(Integer.toString(item.getItemid()))) { // add the items to the new list this.userselectedItems.add(item); } } // return the new list } return this.userselectedItems; } /** * @param userselectedItems * the userselectedItems to set */ public void setUserselectedItems(List<Item> userselectedItems) { this.userselectedItems = userselectedItems; } /** * @return the selectedMenItems */ /** * @return the cartlist */ public List<Item> getCartlist() { Cartlist.clear(); Cartlist.addAll(getUserselectedItems()); return Cartlist; } /** * @param cartlist * the cartlist to set */ public void setCartlist(List<Item> cartlist) { Cartlist = cartlist; } /** * @return the userselectedMenItems */ public int getTotal() { int total = 0; for (Item totalItemPrice : getCartlist()) { total += totalItemPrice.getPrice(); } return total; } /** * @return the selectedDataItems */ // public List<Item> getSelectedDataItems() { // return selectedDataItems; // } // // /** // * @param selectedDataItems the selectedDataItems to set // */ // public void setSelectedDataItems(List<Item> selectedDataItems) { // this.selectedDataItems = selectedDataItems; // } /** * @return the selectedDataitem */ public Item getSelectedDataitem() { return selectedDataitem; } /** * @param selectedDataitem * the selectedDataitem to set */ public void setSelectedDataitem(Item selectedDataitem) { this.selectedDataitem = selectedDataitem; } public void saveOrder() { Orders itemsOrdered = new Orders(); for (int i = 0; i < userselectedItems.size(); i++) { System.out.println(userselectedItems.get(i).getName()); itemsOrdered = new Orders((userselectedItems.get(i).getName()), (userselectedItems.get(i).getPrice())); System.out.println(itemsOrdered.getOrderName()); System.out.println(itemsOrdered.getTotalPrice()); itemsOrdered.setOrderDetails(Cartlist); System.out.println(i); System.out.println("Items ordered: " + itemsOrdered); System.out.println("List item:" + Cartlist.get(0).getName()); ManageOrder dao = new ManageOrder(); for (int j = i; j < Cartlist.size(); j++) { dao.addOrders(userselectedItems.get(j).getName(), Cartlist.get(j).getPrice(), (ArrayList) Cartlist); System.out.println("Name: " + userselectedItems.get(j).getName()); System.out.println("Price : " + Cartlist.get(j).getPrice()); } } } 中存储Point个引用,而是存储Node:这包括Object,但也包括所有其他类,即其中的类这个方法没有定义。

因为无法静态地知道特定节点的数据是否为Point,所以编译器必须假设“最小公分母”,即Point,因此只允许您调用在Object上定义的方法。

您需要专门化列表来保存Object引用,或者使其成为通用的,以便它可以保存任何但是以类型安全的方式,即您(或者更确切地说) ,编译器)可以知道实例实际上是Points。

Point
相关问题