有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    好的,让我解释一下

    假设“人”是人,我们想创建一个类的对象“人”
    我们给人类类一些人类可以做的功能。让我们说走,跑,坐
    每个函数都告诉对象(人)该做什么

    另一方面,我们想为外星人创建一个类来创建另一个对象。我们将把它命名为“外星人”。假设外星人是人形的,所以它可以做任何人类能做的事情,再加上一些人类不能做的特殊能力。例如“飞”

    为了防止它编写与类Alien完全相同的函数(walk、run、sit)。我们继承了类Human,因此我们可以从Human类中获得函数(walk、run、sit)

    让我们说: 人类h->;对象“h”是人类(oid)

    但是“h”实际上是一个外星人,所以我们必须定义它,这样代码就出现了:

    Human h = new Alien();
    

    换句话说。假设你有这样一个结构:

    Human (functions: walk, run, sit)
       Alien (functions: (inherit: walk, run, sit), fly)
    

    如果我错了,请纠正我

    我希望这能有所帮助

  2. # 2 楼答案

    这里“人类”和“外星人”的用法很可怕。与其说是“人”,不如说是“动物”。与其说是“外星人”,不如说是“狗”

    术语也不太好。“对象”是字面对象本身:物理狗<->;内存中与之相关的位。“Reference”是变量h。它引用了对象狗h并不像视频中提到的人类/外星人那样,是“动物和狗的对象”。这是“指狗的物体”。然而,变量“h”本身并没有强迫只参考狗。事实上,它可以引用任何动物

    例如,我可以编写以下代码:

    Animal mypet = new Dog();
    mypet = new Cat();
    

    如果我写了Dog mypet行,那么我将被迫只写mypet = new Dog()mypet = getDogFromShelter(myNeighborhoodShelter)。它不允许我写mypet = new Cat()

    猫很酷,所以那太可怕了。因此,我们写Animal mypet来允许变量mypet引用任何动物DogCatElephant都将可用。然而,由于这个限制,我不允许对mypet做任何Dog特定的事情

    如果mypet是一种动物,那么mypet.bark()将不起作用。并非所有动物都会吠叫mypet.eat(Food)会起作用,因为所有动物都能吃。如果我想让我的宠物吠叫,因为我知道它现在是一只狗,那么我可以这么做

    ((Dog)mypet)).bark(); // Will throw run-time error if mypet is not a Dog! // This is best to avoid, so just make mypet a Dog type if it must bark. // If you must make an Animal bark, use if (!(mypet instanceof Dog)) to handle the error propely.

    上面的代码将检查mypet是否是狗,然后再让它吠叫

    这可以通过编写代码来实现

    class Animal {
        int health = 100;
        void eat(Food f) {
            health += f.value;
        }
    }
    
    class Dog extends Animal { // States that "All Dogs are Animals"
        // The word "extends" allows you to write Animal a = new Dog();
        // "extends" also lets you do "Dog a = new Dog(); a.eat()"
        int health = 150; // Dogs are strong
        void bark() {
            scareNearbyAnimals();
        }
    }
    
    class Poodle extends Dog {
        // Both of these will work:
        // Dog mydog = new Poodle();
        // Animal mypet = new Poodle();
        int glamor = 50; // glamorous
    }
    

    视频混合了对象和引用,因此我将使用以下代码使其更加明确

    Dog a = new Dog(); b = a;

    ab在这个实例中都引用同一个对象。如果Dog使用了大量内存,那么b = a不会导致分配更多内存

    b.hasEaten(); // False a.eat(); b.hasEaten(); // True b = new Dog(); // Now they are different. a does not affect b

    a.eat()允许对象吃东西。内存中的位已更改:饥饿值已重置b.hasEaten()检查a吃东西时使用的同一只狗的饥饿值b = new Dog()将它们分开,以便ab引用不同的狗对象。它们将不再像以前那样结合在一起