جاوا
جلسه ۴۲: متدهای استاتیک در اینترفیس ها در جاوا

public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
Vehicle.cleanVehicle(); //This will compile.
}
}
آزمون
functional interface
را بررسی خواهیم کرد.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
کلاس زیر کامپایل خواهد شد زیرا ما از طریق ارجاع به اینترفیس ، متد استاتیک اینترفیس را فراخوانی می کنیم.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
Vehicle.cleanVehicle(); //This will compile.
}
}
آزمون
functional interface
را بررسی خواهیم کرد.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
در اینترفیس فوق ، در کلاس Car
خطای کامپایل دریافت می کنیم زیرا یک متد استاتیک نمی تواند override
شود. همچنین ، از آنجا که یک متد استاتیک پنهان است ، نمی توانیم آن را از طریق شی کلاس مشتق شده فراخوانی کنیم پس کد زیر نیز کامپایل نخواهد شد.public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
car.cleanVehicle(); //This will not compile.
}
}
public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
کلاس زیر کامپایل خواهد شد زیرا ما از طریق ارجاع به اینترفیس ، متد استاتیک اینترفیس را فراخوانی می کنیم.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
Vehicle.cleanVehicle(); //This will compile.
}
}
آزمون
functional interface
را بررسی خواهیم کرد.این جلسه متدهای استاتیک در اینترفیس ها و دلیل معرفی آنها در جاوا ۸ را بررسی می کند.موارد زیر را بیان خواهیم کرد:- متد استاتیک در اینترفیس چیست؟
متد استاتیک در اینترفیس چیست؟
متد های استاتیک در اینترفیس ها مشابه متد های پیش فرض است اما تنها تفاوت در این است که نمی توانید آنها راoverride
کنید. پس با وجود متدهای پیش فرض ، چه نیازی به متدهای استاتیک در اینترفیس ها داریم؟فرض کنید به پیاده سازی یک متد در رابط کاربری خود نیاز دارید ولی نمی خواهید این پیاده سازی در کلاس مشتق شده override
شود ، بنابراین می توانید متد را به صورت استاتیک اعلام کنید.در مثال زیر ، ما یک اینترفیس Vehicle
با یک متد استاتیک به نام ()cleanVehicle
تعریف کرده ایم.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
کلاسی به نام Car
را اعلام می کنیم که این اینترفیس Vehicle
را پیاده سازی می کند.public class Car implements Vehicle {
@Override
public void cleanVehicle() {
System.out.println("Cleaning the vehicle");
}
public static void main(String args[]) {
Car car = new Car();
car.cleanVehicle();
}
}
public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
در اینترفیس فوق ، در کلاس Car
خطای کامپایل دریافت می کنیم زیرا یک متد استاتیک نمی تواند override
شود. همچنین ، از آنجا که یک متد استاتیک پنهان است ، نمی توانیم آن را از طریق شی کلاس مشتق شده فراخوانی کنیم پس کد زیر نیز کامپایل نخواهد شد.public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
car.cleanVehicle(); //This will not compile.
}
}
public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
کلاس زیر کامپایل خواهد شد زیرا ما از طریق ارجاع به اینترفیس ، متد استاتیک اینترفیس را فراخوانی می کنیم.public interface Vehicle {
static void cleanVehicle(){
System.out.println("I am cleaning vehicle");
}
}
public class Car implements Vehicle {
public static void main(String args[]){
Car car = new Car();
Vehicle.cleanVehicle(); //This will compile.
}
}
آزمون
functional interface
را بررسی خواهیم کرد.