Totalmente resolver Java classes abstratas e cenários interfaces e papel

classe abstrata

注:先将抽象类中的两种方法解释完,再综合解释抽象类

método abstrato

  • Cenário: Em todas as suas subclasses deve ter este método, mas a maioria subclasse específica dos passos são diferentes.
  • Você deve ser reescrita: Você também pode dizer "deve ser alcançado", porque a classe pai abstrato há corpo do método.
  • palavras-chave:abstract

método comum

  • Cenário: Em todas as suas subclasses e método deve ter a subclasse mais específica do passo é idêntico.
  • Regraváveis: Os métodos mais comuns pode ser substituído, para cada passo são da mesma subclasse há necessidade de reescrever NATURAL; a maior parte do mesmo passo subclasse é necessário no caso de que uma pequena porção dos diferentes sub classe de reescrever.
  • Selecione por: cenários ver

classe abstrata detalhado

  • Definição: um método em que a classe resumo deve ser definida como uma classe abstracta.
  • Razão de ser: para alcançar programa de polimorfismo. (Deve ser herdado, caso contrário, a sua existência é sem sentido)

    Pergunta: Desde que os métodos convencionais pode ser substituído, então as subclasses têm diferentes passos de execução gostaria de reescrever métodos abstratos por que eu preciso dele?

    A: O método abstrato deve ser reescrito e nenhum corpo de método da classe pai, em vez do método convencional deve ser reescrito e a classe pai tem um corpo de método; causando assim um problema: Programa muito grande para utilizar este método, o pai muitos métodos de classe comuns, subclasse deve se lembrar de reescrever, mas a máquina virtual java e não irá dizer-lhe para reescrever, reescrever não apenas subclasse o método padrão classe pai, de acordo com a implementação do corpo; e método abstrato é diferente a subclasse não substitui
    o erro de máquina virtual java, desta vez desempenhou um papel, bem como um lembrete obrigatório.

interface

  • Definição: a presença da interface é conseguir procedimentos escaláveis.
  • Razão de ser: se sua classe arquitetura, extensões de uma classe para como fazer? Então, nós estamos indo para modificar o pai dessa classe é a superclasse mesmo dizer isso? Isto é claramente irracional. (E se você usar a classe fornecido por outra pessoa, é simplesmente impossível modificá-lo) Talvez você não vai ser rastreada até ao objeto. Mas usando a interface, você quer dar uma aula neste extensões do sistema, basta dar Essa classe implementa uma nova interface, irá, naturalmente, proporcionar novas funcionalidades, ele não afeta sua superclasse, 而它的子类自动也扩充了它新增加的这个接口的方法(um pouco como C ++ e mais herança). Isso torna o software mais fácil de extensões. 设计模式中有一条开闭原则,说:软件实体必须都修改关闭,对扩展开放。Usar interface, você pode atender a essas exigências do projeto.
  • Cenário: Esta classe requer algumas subclasses em que, embora alguns não, o acesso, em seguida, para a interface para as necessidades da subclasse.

    Pergunta: Como a interface é uma específicos de subclasse, então por que não podemos dirigir esta subclasse definida maneira comum de fazer isso?

    A: Isso é nenhuma experiência escrevendo grandes programas de perguntas mais frequentes. A interface chamado, é usado por pessoas que você não sabe o que a subclasse e chamar sua subclasse. Desta vez, como as pessoas sabem o que você subclasse maneira de fazer isso? Então você dizer a ele que meu subclasse herda uma interface, e outros para ver, oh, essa interface, existem métodos a, b, c, de modo que você pode chamar. Você diz por que não dizer-lhe subclasse dela, esta é a reutilização. Uma interface, você pode usar várias subclasses para alcançá-lo, outros apenas chamar uma interface alterando a subclasse, você pode usar uma variedade de funções sem alterar o código. Claro que, para alcançar a natureza sub-classe destes métodos é também OK ah, mas se você tivesse um pai, eles não entendem o que você quer dizer, você herdar a classe pai, esqueça o método de escrever a ser alcançado como fazer? Interface jogado medidas coercivas.

注:抽象类和接口共同支持了程序的可维护性。

A título de exemplo compreensão

Primeiro vamos resolver o que o relacionamento entre as classes (marcados com * é uma classe abstrata)

  • Estudante * (estudantes)
    • Studystudent * (classe de aprendizagem)
      • Libstudent (estudantes de artes liberais)
      • Sciencestudent (estudantes de ciência)
    • Longhairstudent * (Art)
      • Artstudent (estudantes de arte)
      • Musicstudent (estudantes de música)

Em seguida, pentear uma variedade de características comportamentais dos alunos (marcados com * são métodos abstratos, # marcado como interfaces)

  • características do aluno: acordar, comer, estudar *, sono
    • Studystudent novos recursos adicionados: Exame *
      • novo recurso adicionado Libstudent: fazer idiomas #
      • novo recurso adicionado Sciencestudent: fazer matemática #
    • Longhairstudent novos recursos adicionados: Skills *

Em seguida sobre o código

//Student

public abstract class Student {
    public void getup() {//起床,所有学生都要做且步骤相同
        System.out.println("起床");
    }
    public void eat() {
        System.out.println("吃饭");
    }
    public void sleep() {
        System.out.println("睡觉");
    }
    abstract public void study();
}
//Studystudent

public abstract class Studystudent extends Student {
    abstract public void exam();
}
//Longhairstudent

public abstract class Longhairstudent extends Student {
    abstract public void skilltrain();
}
//Libstudent

public class Libtstudent extends Studystudent implements Morechinese{

    @Override
    public void dochinese() {
        System.out.println("多做语文");
    }

    @Override
    public void exam() { 
        System.out.println("考试政史地");
    }

    @Override
    public void study() {
        System.out.println("学习政史地");
    }

}
//Sciencestudent

public class Libtstudent extends Studystudent implements Morechinese{

    @Override
    public void dochinese() {
        System.out.println("多做语文");
    }

    @Override
    public void exam() { 
        System.out.println("考试理化生");
    }

    @Override
    public void study() {
        System.out.println("学习理化生");
    }

}
//Artstudent

public class Artstudent extends Longhairstudent{

    @Override
    public void skilltrain() {
        System.out.println("美术技能训练");
    }

    @Override
    public void study() {
        System.out.println("学习画画基本功");
    }

}
//Musicstudent


public class Musicstudent extends Longhairstudent{

    @Override
    public void skilltrain() {
        System.out.println("唱歌技能训练");
    }

    @Override
    public void study() {
        System.out.println("学习唱歌基本功");
    }

}
//主类

public class Demo {
    public static void Oneday(Student cuteStudent) {
        cuteStudent.getup();
        cuteStudent.eat();
        cuteStudent.study();
        cuteStudent.sleep();
    }

    public static void main(String[] args) {
        Oneday(new Artstudent());
    }
}

Definimos um corpo de método (Oneday) na categoria principal, para ver um dia estudante atividades gerais. O parâmetro método é estudante de referência, então nós só precisa mudar a instanciação pode obter diferentes tipos de alunos em um dia quando se utiliza este método.

FIG resultados da execução são os seguintes:

Se as novas Libstudents alterados, os resultados da execução, conforme mostrado abaixo:

Como podemos definir as interfaces para usá-lo? Foi adicionado no código principal categoria é a seguinte:

Moremath iMoremath=new Sciencestudent();
iMoremath.domath();

ou;

new Sciencestudent().domath();

Ele será exibido após a implementação de "math fazer".

Acho que você gosta

Origin www.cnblogs.com/hackerstd/p/12519387.html
Recomendado
Clasificación