super()
Üst yapıcıyı çağırmak için mi kullanılır? Lütfen açıklayınız super()
.
super()
Üst yapıcıyı çağırmak için mi kullanılır? Lütfen açıklayınız super()
.
Yanıtlar:
super()
üst yapıcıyı argüman olmadan çağırır.
Bağımsız değişkenlerle de kullanılabilir. Yani super(argument1)
ve türünün argument1
(varsa) 1 parametresini kabul eden yapıcıyı çağıracaktır .
Ayrıca ebeveynin yöntemlerini çağırmak için kullanılabilir. yanisuper.aMethod()
Daha fazla bilgi ve eğitim burada
super(...)
yalnızca bir kurucudaki ilk ifade olarak kullanılabilir.
Bazı gerçekler:
super()
, üst ebeveyni aramak için kullanılır.super()
örnek üyeleriyle, örneğin örnek değişkenleri ve örnek yöntemleri ile kullanılabilir.super()
üst sınıfın yapıcısını çağırmak için bir kurucu içinde kullanılabilir.Tamam, şimdi pratikte bu noktaları uygulayalım super()
.
Program 1 ve 2 arasındaki farkı kontrol edin. Burada, program 2 super()
Java'daki ilk ifademizi kanıtlar .
Program 1
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();
}
}
Çıktı:
200
200
Şimdi program 2'ye bakın ve ana farkı anlamaya çalışın.
Program 2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
Çıktı:
100
200
Program 1'de çıktı sadece türetilmiş sınıftan alınmıştır. Ne taban sınıfın ne de üst sınıfın değişkenini yazdıramadı. Ancak programın 2'de, kullanılan super()
değişken a
üretimini baskı ve bunun yerine değişkeninin değerinin baskı sırasında a
türetilmiş bir sınıf, bu değişkenin değeri basılı a
temel sınıf. Böylece super()
, ebeveynin derhal çağrıldığını kanıtlar .
Tamam, şimdi program 3 ve program 4 arasındaki farkı kontrol edin.
Program 3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
Çıktı:
200
Burada çıkış biz çağrıldığında 200 olduğunu Show()
, Show()
türetilmiş sınıfın fonksiyonu olarak adlandırıldı. Ancak Show()
ana sınıfın işlevini çağırmak istiyorsak ne yapmalıyız ? Çözüm için program 4'e bakın.
Program 4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
Çıktı:
100
200
Burada iki çıkış alıyoruz, 100 ve 200. Show()
Türetilmiş sınıfın işlevi çağrıldığında, önce Show()
üst sınıfın işlevini çağırır , çünkü Show()
türetilmiş sınıfın Show()
işlevi içinde, üst sınıfın işlevini super
işlev adından önceki anahtar sözcük.
super()
bir anahtar kelime değil. Bir yapıcı çağrımıdır. super
bir anahtar kelimedir ve # 1 ve # 2 yalnızca bu tanımla anlamlıdır.
Kaynak makale: Java: Calling super ()
Evet. super(...)
süper sınıfın yapıcısını çağırır.
İllüstrasyon:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
public class Test {
public static void main(String[] a) {
new Dog();
}
}
Baskılar:
Constructing an animal: From Dog constructor
Constructing a dog.
super()
, hiçbir argüman almayan süper sınıfın yapıcısını çağırır. Benzer şekilde, böyle yaparsanız 1 bağımsız değişken yapıcısını çağırır super(arg1)
.
super()
geçerli bir çağrı olmaz.
Üst yapıcıyı çağırmak için super () kullanılır mı?
Evet.
Pls Süper () hakkında açıklar.
super()
super
parametresiz bir üst yapıcı çağırdığınız anahtar kelimenin özel bir kullanımıdır . Genel olarak, super
anahtar kelime geçersiz kılınan yöntemleri çağırmak, gizli alanlara erişmek veya bir üst sınıf yapıcısını çağırmak için kullanılabilir.
İşte resmi eğitim
super()
üst super.myMethod()
yapıcıyı çağırmak için kullanılır, geçersiz kılınmış bir yöntemi çağırmak için kullanılır.
Bağımsız değişken olmayan süper kurucu olarak adlandırmak sadece ekran alanı ve programcı zaman kaybıdır. Derleyici, yazsanız da yazmasanız da tam olarak aynı kodu üretir.
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
Bütün cevapları gördüm. Ancak herkes çok önemli bir noktadan bahsetmeyi unuttu:
super (), kurucunun ilk satırında çağrılmalı veya kullanılmalıdır.
Sadece süper (); tek başına bir sınıfın üst sınıfından varsa varsayılan kurucuyu çağırır. Ancak, varsayılan kurucuyu kendiniz açıkça yazmalısınız. Bir Java kullanmazsanız, sizin için hiçbir uygulama olmadan bir tane oluşturur, super (); , evrensel Üst Sınıf Nesnesi'ne atıfta bulunursanız, bunu alt sınıfta çağıramazsınız.
public class Alien{
public Alien(){ //Default constructor is written out by user
/** Implementation not shown…**/
}
}
public class WeirdAlien extends Alien{
public WeirdAlien(){
super(); //calls the default constructor in Alien.
}
}
Örneğin, selenyum otomasyonunda, üst öğesinin yapıcısını şu şekilde kullanabilen bir PageObject öğeniz vardır:
public class DeveloperSteps extends ScenarioSteps {
public DeveloperSteps(Pages pages) {
super(pages);
}........
Anladığım her şeyi kodlarla paylaşmak istiyorum.
Java'daki süper anahtar sözcük, üst sınıf nesnelerine başvurmak için kullanılan bir başvuru değişkenidir. Büyük ölçüde aşağıdaki bağlamlarda kullanılır: -
1. super değişkenleri ile kullanımı:
class Vehicle
{
int maxSpeed = 120;
}
/* sub class Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180;
void display()
{
/* print maxSpeed of base class (vehicle) */
System.out.println("Maximum Speed: " + super.maxSpeed);
}
}
/* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}
Çıktı:-
Maximum Speed: 120
/* Base class Person */
class Person
{
void message()
{
System.out.println("This is person class");
}
}
/* Subclass Student */
class Student extends Person
{
void message()
{
System.out.println("This is student class");
}
// Note that display() is only in Student class
void display()
{
// will invoke or call current class message() method
message();
// will invoke or call parent class message() method
super.message();
}
}
/* Driver program to test */
class Test
{
public static void main(String args[])
{
Student s = new Student();
// calling display() of Student
s.display();
}
}
Çıktı:-
This is student class
This is person class
3. süper yapıcılar ile kullanımı:
class Person
{
Person()
{
System.out.println("Person class Constructor");
}
}
/* subclass Student extending the Person class */
class Student extends Person
{
Student()
{
// invoke or call parent class constructor
super();
System.out.println("Student class Constructor");
}
}
/* Driver program to test*/
class Test
{
public static void main(String[] args)
{
Student s = new Student();
}
}
Çıktı:-
Person class Constructor
Student class Constructor
Yapıcılar
Bir kurucuda, başka bir kurucu çağırmak için onu nokta olmadan kullanabilirsiniz. super
üst sınıfta bir kurucu çağırır; this
bu sınıfta bir kurucu çağırır:
public MyClass(int a) {
this(a, 5); // Here, I call another one of this class's constructors.
}
public MyClass(int a, int b) {
super(a, b); // Then, I call one of the superclass's constructors.
}
super
üst sınıfın kendini başlatması gerekiyorsa yararlıdır. this
tüm zor başlatma kodunu kuruculardan birine yalnızca bir kez yazmanıza ve diğer tüm yazması daha kolay kuruculardan çağırmanıza olanak tanır.
Yöntemler
Herhangi bir yöntemde, başka bir yöntemi çağırmak için bir nokta ile kullanabilirsiniz. super.method()
üst sınıfta bir yöntemi çağırır; this.method()
bu sınıftaki bir yöntemi çağırır:
public String toString() {
int hp = this.hitpoints(); // Calls the hitpoints method in this class
// for this object.
String name = super.name(); // Calls the name method in the superclass
// for this object.
return "[" + name + ": " + hp + " HP]";
}
super
belirli bir senaryoda yararlıdır: sınıfınız üst sınıfınızla aynı yönteme sahipse, Java sınıfınızda olanı istediğinizi varsayar; super
bunun yerine üst sınıfın yöntemini sormanızı sağlar. this
yalnızca kodunuzu daha okunaklı hale getirmenin bir yolu olarak kullanışlıdır.
Süper anahtar kelime üst sınıf kurucusunu çağırmak için ve üst sınıf bir üyesi başvurmak için kullanılabilir
Aradığınızda () süper doğru argümanlarla, aslında kurucusunu çağırmak Kutu değişkenleri başlatır, genişlik , yükseklik ve derinlik gelen parametre değerlerini kullanarak kendisine gönderilen,. Sadece katma değer ağırlığını başlatmak için kalırsınız. Gerekirse, artık Box değişkenlerini özel olarak sınıflandırabilirsiniz . Box sınıfı özel değiştiricisinin alanlarına koyun ve bunlara sorunsuz bir şekilde erişebildiğinizden emin olun.
Üst sınıfta aşırı yüklenmiş sürüm yapıcıları olabilir, bu nedenle yöntemi farklı parametrelerle super () olarak çağırabilirsiniz . Program, belirtilen bağımsız değişkenlerle eşleşen yapıcıyı gerçekleştirir.
public class Box {
int width;
int height;
int depth;
Box(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
public static void main(String[] args){
HeavyBox heavy = new HeavyBox(12, 32, 23, 13);
}
}
class HeavyBox extends Box {
int weight;
HeavyBox(int w, int h, int d, int m) {
//call the superclass constructor
super(w, h, d);
weight = m;
}
}
super bir anahtar kelimedir. Üst sınıfta tanımlanan bir yöntemi çağırmak için bir alt sınıf yöntemi tanımının içinde kullanılır. Üst sınıfın özel yöntemleri çağrılamaz. Süper anahtar kelime tarafından yalnızca herkese açık ve korunan yöntemler çağrılabilir. Ayrıca sınıf yapıcılar tarafından üst sınıfının yapıcılarını çağırmak için kullanılır.
Kontrol burada daha fazla açıklama için.
Belirtildiği gibi, varsayılan kurucu içinde kurucunun ilk satırında çağrılan örtük bir super () vardır .
Bu super () otomatik olarak sınıf hiyerarşisinin en üstünde başlayan bir yapıcı zincirini çağırır ve hiyerarşiyi aşağı taşır.
Olsaydı ikiden fazla sınıfları programın sınıf hiyerarşisinde, üst sınıf varsayılan yapıcı alacağı denilen ilk .
İşte bunun bir örneği:
class A {
A() {
System.out.println("Constructor A");
}
}
class B extends A{
public B() {
System.out.println("Constructor B");
}
}
class C extends B{
public C() {
System.out.println("Constructor C");
}
public static void main(String[] args) {
C c1 = new C();
}
}
Yukarıdaki çıktı:
Constructor A
Constructor B
Constructor C