Experimento 2: Design de classes e objetos Java

índice

1. O objetivo do experimento

2. Código experimental

1. Defina uma classe MyProgram, que contém dois atributos:

2. Crie uma classe Tractor com base na classe Vehicle

3. Combine para realizar a classe do carro

4. Há uma interface gráfica Forma, consulte a classe Círculo para complementar as classes Quadradas e Triângulo completas e analise os resultados da corrida.

5. Programação da interface USB

6. Esta palavra-chave tem três aplicações principais:

7. Descreva resumidamente a função da palavra-chave estática

8. Descreva resumidamente a função da super palavra-chave

9. Descreva resumidamente o papel das palavras-chave finais

Uma palavra por texto


 

1. O objetivo do experimento

1. Dominar ideias, classes e objetos de programação orientada a objetos;

2. Compreender o papel do encapsulamento, herança e polimorfismo de classes;

3. Dominar as características das variáveis ​​de membro e métodos de membro, métodos de construção, métodos toString e o uso de métodos equals ;

4. Domine o uso de palavras-chave como this , super , final , static, etc .;

5. Dominar o uso de interfaces e objetos de interface;

6. Dominar a definição e uso de pacotes;

7. Domine os quatro tipos de permissões de controle de acesso privado , padrão , protegido e público .

 

2. Código experimental

1. Defina uma classe MyProgram, que contém dois atributos:

É um atributo inteiro privado Data , é um atributo privado do tipo String STR , quatro propriedades de empacotamento desses dois métodos setData () e getData () , setStr () e getStr () ; sobrescrever o método toString (personalizado Format); reescrever o método equals (os atributos data e str são iguais para indicar que os dois objetos são iguais). E escreva um programa de teste para testar o uso da classe MyProgram .

package 作业练习.test2;

public class MyProgram {
    public static void main(String[] args) {
        Test t1=new Test();
        Test t2=new Test();
        t1.setStr("A");
        t2.setStr("B");
        t1.setData(1);
        t2.setData(2);
        System.out.println(t1.equals(t2));
        System.out.println(t1.toString());
        System.out.println(t2.toString());
    }

}

class Test{
    private String str;
    private int data;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public int getData() {
        return data;
    }
    public void setData(int data) {
        this.data = data;
    }

    @Override
    public boolean equals(Object object) {
        Test test =(Test) object;
        if(test.getData()==this.getData()&&test.getStr() == this.getStr()) {
            return true;
        }
        else {
            return false;
        }
    }

    @Override
    public String toString() {
        return "str为"+this.getStr()+"\tdata为:"+this.getData();
    }
}

2. Crie uma classe Tractor com base na classe Vehicle

Ele não só tem os quatro atributos de viagem, wheelNum, LoadNum e driveSpeed ​​e o método DriveAt (), mas também tem seu próprio método arado (), no qual os valores dos três atributos de viagem, wheelNum e LoadNum devem ser exibidos. Escreva uma classe de teste e chame os métodos DriveAt () e plow ().

package 作业练习.test2;

public class Vehicle {
    public float journey;
    public int wheelNum;
    public int loadNum;
    public int driveSpeed;

    public Vehicle() {
        journey = 100.3f;
        wheelNum = 4;
        loadNum = 1;
    }

    public void driveAt(int speed) {
        if (speed >= 60) {
            System.out.println("行车速度太快,容易造成事故");
            driveSpeed = 40;
        } else {
            System.out.println("你在安全行驶速度内行驶");
            driveSpeed = speed;
        }
    }
}

package 作业练习.test2;

public class Tractor extends Vehicle {
    public void plough() {
        System.out.println("公里数:"+this.journey);
        System.out.println("车速:"+this.driveSpeed);
        System.out.println("承载量:"+this.loadNum);
    }
    public static void main(String[] args) {
        Tractor t = new Tractor();
        t.plough();
        t.driveAt(80);
        t.plough();
    }
}

 

3. Combine para realizar a classe do carro

Descrição do problema: um carro tem (tem) quatro rodas (rodas) e um motor (motor). Agora é necessário projetar a classe Carro, Roda e Motor com um método de combinação.

(1) A classe Engine possui um tipo de atributo string para registrar o modelo do motor;

Existe um método de construção e o modelo do motor pode ser definido;

Há um método start () para dar partida no motor (enviar o modelo do motor e a string "iniciar").

(2) A classe Wheel tem um tipo de atributo de string para registrar o modelo do pneu e um índice de atributo de tipo inteiro para registrar o número do pneu atual (1: frontal esquerdo, 2: frontal direito, 3: traseiro esquerdo, 4: traseiro direito);

Existe um método de construção e o modelo e o número do pneu podem ser definidos;

Há um método roll () para indicar que o pneu está girando (modelo do pneu de saída, posição do pneu e corda de "rolamento").

(3) A classe Car tem um atributo model string para registrar o modelo do carro, e tem os atributos wheels [] e engine, que são uma matriz de objetos da classe Wheel e objetos da classe Engine respectivamente;

Existe um método de construção e os parâmetros são três cadeias, que representam respectivamente o modelo do carro, o modelo do pneu e o modelo do motor;

Existe um método changeWheel () para alterar o modelo de pneu especificado;

Há um método start (), que primeiro produz o modelo do carro e a string "firing", depois chama a partida do motor (), depois chama o roll () de todos os pneus e, finalmente, exibe o modelo do carro e a string "running".

(4) Escreva um programa de teste para testar todos os métodos acima.

package 作业练习.test2;

class Engine extends Car {
    String type ;

    public void Engine(String type) {
        this.type = type;
    }

    void start() {
        System.out.println(type + " starts");
    }
}

class Wheel extends Car {
    String type ;
    int index = 0;

    public void Wheel(String type, int index) {
        this.type = type;
        this.index = index;
    }

    void roll() {
        System.out.println("wheel" + index + " " + type + " rolling");
    }
}

public class Car {
    String model;
    static Wheel[] wheels;
    static Engine engine = new Engine();

    Car(String model, Wheel[] wheels, String eg) {
        this.model = model;
        this.wheels = wheels;
        engine.Engine(eg);
    }
    Car() {

    }
    public void changeWheel(int index, String str) {
        wheels[index - 1].Wheel(str, index);
    }

    void start() {
        System.out.println(model + " firing");
        engine.start();
        for (int i = 0; i < 4; i++) {
            wheels[i].roll();
        }
    }

    public static void main(String[] args) {
        Wheel[] wheels = new Wheel[4];
        String model = "玛莎拉蒂";
        String engine = "FSI2.0L";
        for (int i = 1; i <= 4; i++) {
            wheels[i - 1] = new Wheel();
            wheels[i - 1].Wheel("德国马牌", i);
        }
        Car car = new Car(model, wheels, engine);
        car.start();
        System.out.println("-----更改轮胎型号-----");
        car.changeWheel(2, "米其林");
        car.changeWheel(3, "倍耐力");
        car.start();
    }
}

 

4. Há uma interface gráfica Forma, consulte a classe Círculo para complementar as classes Quadradas e Triângulo completas e analise os resultados da corrida.

package 作业练习.test2;

interface Shape {
    void draw();

    void erase();

}

class Circle implements Shape {
    public void draw() {
        System.out.println("Circle.draw()");
    }

    public void erase() {
        System.out.println("Circle.erase()");
    }
}

class Square implements Shape {
    public void draw() {
        System.out.println("Square.draw()");
    }

    public void erase() {
        System.out.println("Square.draw()");
    }
}

class Triangle implements Shape {
    public void draw() {
        System.out.println("Triangle.draw()");
    }

    public void erase() {
        System.out.println("Triangle.draw()");
    }
}

public class Shapes {
    public static Shape randShape() {
        switch ((int) (Math.random() * 3)) {
            default:
            case 0:
                return new Circle();
            case 1:
                return new Square();
            case 2:
                return new Triangle();
        }
    }

    public static void main(String[] args) {
        Shape[] s = new Shape[9];
        for (int i = 0; i < s.length; i++)
            s[i] = randShape();
        for (int i = 0; i < s.length; i++)
            s[i].draw();
    }
}

5. Programação da interface USB

Normalmente, os computadores que as pessoas usam têm interfaces USB, e o mouse, teclado, microfone, etc. podem ser todos conectados à interface USB para uso. Quando o computador é iniciado, esses dispositivos também são iniciados; quando o computador é desligado, esses dispositivos também são desligados. Depois que os dispositivos de interface USB, como mouse, teclado, microfone, etc., forem todos iniciados, o computador pode ser ligado com sucesso; quando esses dispositivos forem desligados, o computador será desligado com sucesso.

Leia o programa de interface USB escrito , o programa simula o processo de inicialização e desligamento do computador e grava o resultado da execução.

package 作业练习.test2.USB接口;

public class Computer {
    private USB[] usbArr=new USB[4];
    //向计算机上连接一个USB设备
    public void add(USB usb){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现一个空的
            if(usbArr[i]==null){
                usbArr[i]=usb;
                break;
            }
        }
    }
    //计算的开机功能
    public void powerOn(){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现有设备
            if(usbArr[i]!=null){
                //将USB设备启动
                usbArr[i].turnOn();
            }
        }
        System.out.println("计算机开机成功!!!");
    }
    //计算的关机功能
    public void powerOff(){
        //遍历所有的插槽
        for(int i=0;i<usbArr.length;i++){
            //如果发现有设备
            if(usbArr[i]!=null){
                //将USB设备关闭
                usbArr[i].turnOn();
            }
        }
        System.out.println("计算机关机成功!!!");
    }
}
package 作业练习.test2.USB接口;

public class KeyBoard implements USB {
    @Override
    public void turnOn() {
        System.out.println("键盘启动了......");
    }
    @Override
    public void turnOff() {
        System.out.println("键盘关闭了......");
    }
}
package 作业练习.test2.USB接口;

public class Mic implements USB {

    @Override
    public void turnOn() {
        System.out.println("麦克风启动了......");
    }
    @Override
    public void turnOff() {
        System.out.println("麦克风关闭了......");
    }
}
package 作业练习.test2.USB接口;

public class Mouse implements USB {
    @Override
    public void turnOn() {
        System.out.println("鼠标启动了......");
    }

    @Override
    public void turnOff() {
        System.out.println("鼠标关闭了......");
    }
}
package 作业练习.test2.USB接口;

public class Test {
    public static void main(String[] args) {
        //实例化计算机对象
        Computer computer=new Computer();
        //向计算机中添加鼠标、麦克风、键盘
        computer.add(new Mouse());
        computer.add(new Mic());
        computer.add(new KeyBoard());

        //启动计算机
        computer.powerOn();
        //关闭计算机
        computer.powerOff();

    }
}

package 作业练习.test2.USB接口;

public interface USB {
    void turnOn();//启动
    void turnOff();//关闭
}

6. Esta palavra-chave tem três aplicações principais:

(1) Isso chama o atributo nesta classe, que é a variável de membro da classe;
(2) Isso chama outros métodos nesta classe;
(3) Isso chama outros métodos de construção nesta classe, que devem ser colocados na primeira linha do método de construção ao chamar.

 

7. Descreva resumidamente a função da palavra-chave estática

Static é um modificador usado para modificar os métodos de membro e variáveis ​​de membro de uma classe.Além disso, você pode escrever blocos de código estáticos para otimizar o desempenho do programa.

Os métodos estáticos modificados geralmente são chamados de métodos estáticos. Como os métodos estáticos podem ser acessados ​​sem depender de nenhum objeto, não há isso para os métodos estáticos porque não estão anexados a nenhum objeto. Como não há objeto, vamos falar sobre isso. Não nisso. E, por causa desse recurso, as variáveis ​​de membro não estático e os métodos de membro não estático da classe não podem ser acessados ​​em métodos estáticos, porque os métodos / variáveis ​​de membro não estático devem depender de objetos específicos para poderem ser chamados. O bloco estático pode otimizar o desempenho do programa devido às suas características: ele só será executado uma vez quando a classe for carregada pela primeira vez.

8. Descreva resumidamente a função da super palavra-chave

super é usado para chamar o método da classe pai com o mesmo nome na classe derivada ou para fazer referência à variável com o mesmo nome. Super é usado em classes derivadas para chamar explicitamente os métodos da classe pai.

class base
{
    int a = 100;
}

class sup1 extends base
{
    int a = 200;
    void show()
    {
        System.out.println(a);
        System.out.println(a);
    }
    public static void main(String[] args)
    {
        new sup1().show();
    }
}

 

9. Descreva resumidamente o papel das palavras-chave finais

A palavra-chave final pode ser usada em três lugares. Usado para decorar classes, atributos de classe e métodos de classe.

A classe modificada pela palavra-chave final não pode ser herdada e os atributos e métodos da classe modificados pela palavra-chave final não podem ser substituídos (substituídos);

Para o atributo de classe modificado pela palavra-chave final, a subclasse não pode reatribuí-lo. Se for reatribuído, um erro será relatado

 

 

Uma palavra por texto

Se uma pessoa tem sorte ou não, depende se ela pode adormecer e se pode acordar.

A cor da sorte de hoje é rosa! Você também pode ter sua própria felicidade ...

Acho que você gosta

Origin blog.csdn.net/weixin_47723732/article/details/112921014
Recomendado
Clasificación