Allgemeine Klassen können nur öffentlich oder standardmäßig sein. Wenn sie öffentlich sind, muss der Klassenname mit dem Dateinamen identisch sein. Im Allgemeinen wird nur eine Klasse in eine Datei geschrieben, daher wird diese Klasse normalerweise mit public hinzugefügt.
Innere Klassen können auch privat und geschützt sein, im Allgemeinen privat, da nur die aktuelle Klasse benötigt wird. Auf diese Weise können nur die äußeren Klassen direkt darauf zugreifen. Es spielt also keine Rolle, ob die darin enthaltenen Daten öffentlich, privat oder standardmäßig sind.
public class Out {private int d = 10;public int add() { // 外部类不能直接访问内部类的数据,除非new出内部类对象,如下 // Out.In abc = new Out().new In();a = 3; // falseb = 5; // false} // 内部类private class In {private int a = 100;int b;public int c;public void add() { System.out.println(d); // true, 内部类却可以直接访问外部类的数据} }public static void main(String[] args) { Out bb = new Out(); Out.In abc = new Out().new In(); bb.d = 20; // 本类可以直接访问private,一般不这样,而是写个set函数,搭配get函数System.out.println(aa.a); // 100System.out.println(bb.d); // 被修改为20} }
Anonymes Objekt
new Abc().run(); // 调用一次后这个对象就销毁new Abc().run(); // 这是另外一个Abc对象了
Über private
private Variablen: Kapseln Sie Daten und zeigen Sie Benutzern nur Methoden an. Beispielsweise kann der private String-Name nicht nach Belieben geändert werden, aber die Methoden setName () und getName () können aufgerufen werden, um eine sicherere Datenkapselung zu realisieren.
Private Methode: Eine Funktion, die nicht vom Benutzer aufgerufen werden muss, kann nach Abschluss einiger interner Implementierungsdetails als privat definiert werden. Beispielsweise ist der Auswahlsortierungsalgorithmus als Methode geschrieben, die den Prozess des Austauschs zweier Daten enthält und in eine Funktion gekapselt ist. Diese Funktion muss nicht vom Benutzer ausgeführt werden (der Benutzer muss nur sort() verwenden), und dieser swap() ist als privat definiert.
kann die Einzigartigkeit der Objekte einer Klasse im Speicher sicherstellen. Wenn Sie dasselbe Konfigurationsinformationsobjekt für mehrere Programme verwenden müssen, müssen Sie dies tun Stellen Sie sicher, dass das Objekt einzigartig ist, dann ist einzelne Instanz erforderlich.
Wenn in der Werkzeugklasse die Objektmitgliedsdaten nicht verwendet (abgerufen) werden, besteht keine Notwendigkeit, ein Objekt zu erstellen. Um die Objekterstellung zu verhindern, kann der Konstruktor als privat definiert werden.
Erlauben Sie anderen Programmen nicht, Objekte dieser Klasse mit new zu erstellen, und setzen Sie den Konstruktor auf privat
Erstellen Sie eine eindeutige Klasseninstanz in diese Klasse
Stellen Sie eine Methode bereit, damit andere Programme dieses einzigartige Objekt erhalten können
Private den Konstruktor dieser Klasse
Fügen Sie ein Objekt dieser Klasse durch new in diese Klasse ein
Definieren Sie eine öffentliche Methode, gibt das in 2 erstellte Objekt zurück. >
// 饿汉式--不管用不用得到,先new出一个再说public class SingleDemo {// private不能将这个实例暴露出去,只能通过getInstance()获取,另为何是static?private static SingleDemo s = new SingleDemo();private SingleDemo() {}// 供外界调用来获取这个对象public static SingleDemo getInstance() {return s; } // 只有本类中可以new对象并调用addpublic void add() { System.out.println("danli"); }public static void main(String[] args) { // 本类可以newSingleDemo a = new SingleDemo(); a.add(); } }public class Test {public static void main(String[] args) { // fasle, 其他类中若用到这个单例,不能newSingleDemo aa = new SingleDemo(); // true SingleDemo aa = SingleDemo.getInstance(); } }
// 另外一种单例设计模式--懒汉模式--用到了才new,延时加载public class SingleDemo {// 先设为空private static SingleDemo s;private SingleDemo() {}// 供外界调用来获取这个对象public static SingleDemo getInstance() { if (s == null) s = new SingleDemo();return s; }Der Hungry-Man-Modus
Java verfügt im Allgemeinen über EinzelvererbungSingle.getInstance()
und kann keine direkte Mehrfachvererbung durchführen -> Da mehrere übergeordnete Klassen möglicherweise dieselben Mitglieder haben, führt der Aufruf zu Mehrdeutigkeiten.
Aber Sie können
mehrstufige Vererbung, wie z. B. A --> B -->--> erbt von C, also Und so weiter.
Verwenden Sie
, wenn Mitglieder von Unterklassen und übergeordneten Klassen dies getan haben derselbe Name Unterscheiden Sie zwischenAbgeleitete Klassen können nicht auf die privaten Mitglieder der Basisklasse zugreifen, sie werden jedoch geerbt, aber Sie können die Funktion
this
super
set、get
set、get
Wenn ein untergeordnetes Objekt neu ist, wird zuerst der Konstruktor der übergeordneten Klasse aufgerufen . Führen Sie dann den Konstruktor der Unterklasse aus.
Der Standardkonstruktor ist Parameterlos, und der
-Konstruktor mit Parametern überschreibt den Parameterlosenpackage Chap1;public class Fu { // 父类的成员是私有的,子类继承过去了也不能直接访问 private int age;private String name;public Fu(int age, String name) {this.age = age;this.name = name; }public int getAge() {return age; }public void setAge(int age) {this.age = age; }public String getName() {return name; }public void setName(String name) {this.name = name; } }class Zi extends Fu { // 特有的job,父不能访问private String job;Zi(int age, String name, String job) {super(age, name);this.job = job; }public String getJob() {return job; } public static void main(String[] args) { Zi aa = new Zi(23, "Zi","Study"); Fu bb = new Fu(55, "Fu"); // 改变子类不会影响父类aa.setAge(24); aa.setName("zi"); // zi 24 Study // Fu 55System.out.println(aa.getName()+" "+aa.getAge() + " " + aa.getJob()); System.out.println(bb.getName()+" "+bb.getAge()); } }
类是public,构造函数也是public的。他们的修饰符是对应的。
Person p = new Person();
JVM读取Person.class文件,加载进内存;若有父类,会先加载父类。
在堆内存中开辟空间,分配地址。
在对象空间中,对对象的属性进行默认初始化,如int age = 0; String name = null
;
显示初始化,如private int age = 9
。若是子类,则会先调用父类的构造器。
(子)类的 构造函数进行特定的初始化。如下程序中age变成100。
初始化后,将地址传递给引用变量。Person p <-- new Person();
package Test;// 先打印9// 再打印100public class Demo {private int age = 9; { System.out.println(age); }Demo(int age) {this.age = age; }public static void main(String[] args) { Demo aa = new Demo(100); System.out.println(aa.age); } }
Das obige ist der detaillierte Inhalt vonJava-Basisklassen und -Objekte, Singleton-Muster, Vererbung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!