[Yugong series] December 2021 Java Teaching Course 32 - abstract classes

Posted by phpian on Tue, 04 Jan 2022 08:01:13 +0100

Article catalog

1, Abstract class

1. Overview of abstract classes (understanding)

When we are doing subclass common function extraction, some methods are not embodied in the parent class. At this time, we need to abstract classes!

In Java, a method without a method body should be defined as an abstract method, and if there is an abstract method in a class, the class must be defined as an abstract class!

2. Characteristics of abstract classes (memory)

3. Cases of abstract classes (Applications)

4. Formwork design mode

5.final (application)

1, Abstract class

1. Overview of abstract classes (understanding)

When we are doing subclass common function extraction, some methods are not embodied in the parent class. At this time, we need to abstract classes!

In Java, a method without a method body should be defined as an abstract method, and if there is an abstract method in a class, the class must be defined as an abstract class!

2. Characteristics of abstract classes (memory)

Abstract classes and methods must be decorated with the abstract keyword

//Definition of abstract class
public abstract class Class name {}
//Definition of abstract methods
public abstract void eat();

Abstract classes do not necessarily have abstract methods, and classes with abstract methods must be abstract classes

Abstract classes cannot be instantiated

Abstract classes can have constructors

Subclasses of abstract classes

Or override all abstract methods in an abstract class

Or it's an abstract class

3. Cases of abstract classes (Applications)

Case requirements

Define cat and dog

Cat member method: eat (cat eats fish) drink (drink water...)

Dog member method: eat (dog eats meat) drink (drink water...)

Implementation steps

There are common contents between cats and dogs, so an Animal should be extracted upward

In the parent class Animal, the concrete implementation of eat method cannot be described clearly, so it is defined as an abstract method

Abstract methods need to survive in abstract classes and define Animal as an abstract class

Let Cat and Dog inherit Animal respectively and override eat method

Create Cat and Dog objects in the test class and call the method test

code implementation

Animals

public abstract class Animal {
    public void drink(){
        System.out.println("drink water");
    }

    public Animal(){

    }

    public abstract void eat();
}
Cats
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cats eat fish");
    }
}
Dogs 
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dogs eat meat");
    }
}
Test class
public static void main(String[] args) {
        Dog d = new Dog();
        d.eat();
        d.drink();

        Cat c = new Cat();
        c.drink();
        c.eat();

        //Animal a = new Animal();
        //a.eat();
    }

4. Formwork design mode

Design pattern

Design pattern is a set of code design experience that is repeatedly used, known by most people, classified and catalogued.

The purpose of using design patterns is to reuse code, make the code easier to be understood by others, ensure code reliability and program reusability.

Template design mode

The abstract class as a whole can be seen as a template, and the things that cannot be determined in the template are defined as abstract methods

Let classes that use templates (classes that inherit abstract classes) override abstract methods to implement requirements

Advantages of template design mode

The template has defined a general structure, and users only need to care about the functions they need to implement

Sample code

template class
/*
    Composition template class
 */
public abstract class CompositionTemplate {

    public final void write(){
        System.out.println("<<My father>>");

        body();

        System.out.println("ah~ This is my father");

    }

    public abstract void body();
}
Implementation class A
public class Tom extends CompositionTemplate {

    @Override
    public void body() {
        System.out.println("It was autumn, The wind is so lingering,In memory, " +
                "That day my father took me home from school by bike,My foot got stuck in the bicycle chain, Dad can't pedal,He got up and kicked...");
    }
Implementation class B

public class Tony extends CompositionTemplate {
    @Override
    public void body() {

    }

    /*public void write(){

    }*/
}
Test class

public class Test {
    public static void main(String[] args) {
        Tom t = new Tom();
        t.write();
    }
}

5.final (application)

Function of fianl keyword

Final stands for the final meaning. It can modify member methods, member variables and classes

final modifies the effects of classes, methods, and variables

fianl decorated class: this class cannot be inherited (it cannot have subclasses, but it can have parent classes)

final modifier method: this method cannot be overridden

final modifier variable: indicates that the variable is a constant and cannot be assigned again

Variables are basic types, and values cannot be changed

Variables are reference types. What cannot be changed is the address value, but the contents of the address can be changed

give an example

public static void main(String[] args){
    final Student s = new Student(23);
      s = new Student(24);  // error
     s.setAge(24);  // correct
}