Java Fundamentals 11 Orienté objet ~ Héritage

Comme vous qui aimez la programmation!
Apprenez les cours pratiques SpringBoot https://edu.csdn.net/course/detail/31433
Apprenez les cours d'introduction SpringCloud https://edu.csdn.net/course/detail/31451


Série orientée
objet: l'
encapsulation de classe et d'objet
hérite d' un mot-clé statique
polymorphe, d'
une interface en mode singleton
et d'une classe interne

Préface

Dans cet article, nous commençons à explorer une autre fonctionnalité importante de l'héritage orienté objet. Vous apprendrez les concepts associés d'héritage, le mot clé super, la méthode de construction en héritage, le mot clé final et les méthodes abstraites.

Présentation de l'héritage

Héritage en réalité: Héritage dans le
Insérez la description de l'image ici
programme:
les membres (attributs et méthodes) de la classe parente peuvent être hérités par la classe enfant, qui joue un rôle dans la réutilisation du code.
Caractéristiques:

  1. Les classes du programme sont divisées en classes parentes et sous-classes
  2. La sous-classe peut hériter de la classe parente, ou on peut dire que la classe parente dérive la sous-classe
  3. Les sous-classes peuvent hériter des propriétés et des méthodes de la classe parent, qui est un mécanisme de réutilisation du code

Comment déterminer que deux classes ont une relation d'héritage?
La classe enfant et la classe parent ont une relation est une (sorte de), la classe enfant est une classe parent
chien est un animal, la voiture est un véhicule ...

Syntaxe héritée

public class 子类 extends 父类{

} 

Cas: Élèves héritiers, les élèves peuvent hériter des attributs et des méthodes communs aux êtres humains, et n'ont qu'à définir leurs propres attributs et méthodes uniques, ce qui réduit considérablement l'écriture de codes en double.

/**
 * 人类
 */
public class Person {

	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public void eat(){
		System.out.printf("%d的%s在吃东西\n",age,name);
	}
}

/**
 * 学生类
 */
public class Student extends Person{

	//学号
	private String no;

	public String getNo() {
		return no;
	}

	public void setNo(String no) {
		this.no = no;
	}
	
	public Student(){
		
	}
	
	public Student(String no,String name,int age) {
		this.no = no;
		//调用了父类的方法
		this.setName(name);
		this.setAge(age);
	}

	public void study(){
		//调用了父类的方法
		System.out.printf("%d岁的学号%s的%s同学在学习Java",this.getAge(),this.getName(),no);
	}
}

public class StudentDemo {

	public static void main(String[] args) {
		Student stu = new Student("001","张三",20);
		//调用父类方法
		stu.eat();
		//调用自身方法
		stu.study();
	}

}

Insérez la description de l'image ici

Héritage en Java

  • Transitivité, les membres de la classe parente peuvent être passés à la sous-classe et la sous-classe de la sous-classe
  • Les sous-catégories à racine unique ne peuvent avoir qu'une seule catégorie parente

super mot-clé

super représente l'objet de classe parent. Les
fonctions sont les suivantes:

  1. Appeler les propriétés de la classe parent
super.属性
  1. Appelez la méthode de la classe parent
super.方法(..)
  1. Appelez le constructeur de la classe parent
super(参数);

La différence entre super et ça:

  1. ceci représente l'objet de la classe courante, super représente l'objet de la classe parent
  2. cela peut appeler les propriétés et les méthodes de la classe actuelle (y compris sa propre classe unique et parent)
    super ne peut appeler que les propriétés et les méthodes de la classe parent
  3. cela peut appeler son propre constructeur, super peut appeler le constructeur de la classe parente

super appelle le constructeur de la classe parente:

给父类添加构造方法:
public Person() {
	System.out.println("这是Person无参的构造方法");
}
public Person(String name, int age) {
	this.name = name;
	this.age = age;
	System.out.println("这是Person带参的构造方法");
}

给子类添加构造方法:
public Student(){
	System.out.println("这是Student无参的构造方法");
}

public Student(String no,String name,int age) {
	//调用了父类的构造方法
	super(name,age);
	this.no = no;
	System.out.println("这是Student带参的构造方法");
}

调用子类:
Student stu = new Student();
Student stu1 = new Student("001","张三",20);

Insérez la description de l'image ici
Remarque:

  1. Si la sous-classe n'écrit pas super, le système appellera la méthode de construction sans paramètre de la classe parent par défaut
  2. Lors de l'appel du constructeur avec les paramètres de la classe parent, la sous-classe doit utiliser super pour appeler explicitement le constructeur de la classe parent
  3. super () doit apparaître dans la première ligne de la méthode de construction de sous-classe
  4. L'appel de la méthode de construction appelle toujours la classe parente en premier, puis appelle la sous-classe

Réécriture de méthode

Qu'est-ce que la réécriture de méthode?
La méthode de la sous-classe peut remplacer la méthode de la classe parente.
Les caractéristiques du remplacement de méthode:

  1. Méthode dans la sous-classe et la classe parent
  2. Même nom de méthode
  3. Les paramètres et les valeurs de retour sont les mêmes
  4. Le modificateur d'accès de la méthode de sous-classe ne peut pas être plus strict que la classe parente

La classe étudiante remplace la méthode eat de la classe parent

//重写父类的方法
public void eat(){
	System.out.printf("%d的%s同学在吃KFC\n",this.getAge(),this.getName());
}

Student stu1 = new Student("001","张三",20);
stu1.eat();

Insérez la description de l'image ici

Classe d'objets

La classe Object est
une méthode commune de la classe Object, la classe parente de toutes les classes en Java :

  • égal comparer égal
  • hashCode renvoie le code de hachage
  • getClass renvoie les informations de type de l'objet
  • toString renvoie les informations de chaîne de l'objet

La différence entre == et égal à
== Pour les types de base, comparez les valeurs;
pour les types de référence, comparez les adresses mémoire.
L'égalité de la classe Object compare également l'adresse de l'objet, car le code source est implémenté avec ==

public boolean equals(Object obj) {
    return (this == obj);
}

Pour le type String, equals compare le contenu des caractères, car la classe String remplace la méthode equals de la classe Object

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

Considérez le résultat de l'exécution du code suivant:

String s1 = "abcd";
String s2 = "abcd";
String s3 = new String("abcd");
System.out.println(s1==s2);		
System.out.println(s2==s3);		
System.out.println(s2.equals(s3));	

Insérez la description de l'image ici

Pour les valeurs constantes telles que "abcd", elles sont allouées dans le pool de constantes; les constantes de chaîne peuvent être utilisées à plusieurs reprises.
Le "abcd" dans les première et deuxième lignes de code est la même constante.
La troisième ligne de code utilise new, qui crée un nouvel objet dans le tas.
La quatrième ligne de code, s1 et s2 sont le même objet, le résultat est vrai,
la cinquième ligne de code, s2 et s3 ne sont pas le même objet, le résultat est faux,
la sixième ligne de code, égale à la valeur de la chaîne, et le résultat est vrai

mot-clé final

Utilisé pour modifier les classes, les variables, les méthodes

  1. Les classes modifiées par final ne peuvent pas être héritées
final class A{}
class B exends A{} //错误
  1. Les variables modifiées par final deviennent des constantes et ne peuvent pas modifier la valeur
final int num = 2000;
num++; //错误
  1. Les méthodes modifiées par final ne peuvent pas être remplacées
class A{
	public final void test(){}
}
class B extends A{
	public void test(){} //错误
}

Méthodes abstraites et classes abstraites

Dans le processus de développement proprement dit, nous devons parfois reporter l'implémentation spécifique de certaines méthodes à l'implémentation de sous-classes.
La signification des méthodes abstraites est:

  1. Peut normaliser la définition de méthode (type de valeur de retour, nom de méthode, paramètre)
  2. L'implémentation spécifique est complétée par la sous-classe

Méthode abstraite:

public abstract 返回值 方法名(类型 参数);

Classe abstraite

abstract class 类名{

}

Modifier la classe Person

/**
 * 抽象类
 */
public abstract class Person {

    ....省略其他代码
    //抽象方法
	public abstract void eat();
}

Remarque:

  1. Une fois qu'une méthode abstraite est définie dans une classe, la classe doit être définie comme une classe abstraite
  2. Les classes avec des méthodes abstraites doivent être des classes abstraites; les classes abstraites n'ont pas nécessairement de méthodes abstraites

Caractéristiques des classes abstraites

  1. La classe abstraite ne peut pas être instanciée
  2. La classe abstraite doit être héritée par les sous-classes et implémenter les méthodes abstraites, sauf si la sous-classe est également abstraite

Fin

Enfin, je vous laisse deux questions de programmation:
1. Définir la catégorie du véhicule, les attributs: couleur, vitesse, consommation de carburant, méthode: se déplacer, s'arrêter.
Définissez la classe de voiture et la classe de navire pour hériter du moyen de transport. La classe de voiture a des attributs de marque et des méthodes de freinage.
Les navires ont des attributs de déplacement et des méthodes d'ancrage.
Créez des objets voiture et bateau et appelez toutes les méthodes.
2. Définissez une catégorie d'appareils ménagers, définissez la puissance, le prix, les attributs de marque et définissez une méthode de démarrage pour générer ces attributs.
Définissez une classe TV, héritez de la classe d'appareils ménagers et ajoutez une méthode de lecture.
Créez un objet TV et appelez la méthode de lecture.
Enfin, ajoutez une méthode de construction paramétrée à l'appareil ménager et utilisez super pour appeler la méthode de construction parent dans le téléviseur.


Si vous avez besoin d'apprendre d'autres connaissances Java, piquez ici des connaissances ultra-détaillées de Java Summary

Je suppose que tu aimes

Origine blog.csdn.net/u013343114/article/details/112463703
conseillé
Classement