简体   繁体   中英

can we define abstract class inside the interface in java?

I am new to this concept, i know the property of interface and abstract. when i explain the concept to my friends, they asked me to create abstract class inside the interface.

please tell me, is it possible to create abstract class inside the interface. i googled, but i am not able find the exact answer for my question.

i tried the below code,but i dont know how to cal the AbstractMethod.

interface Student {

    public abstract class Subject {

        public void AbstractMethod(){
            System.out.println("hi");
        }
    }
}

class Data implements Student {

    public void ClassMethod() {
        System.out.println("method 2");
    }
}

public class NewClass {
public static void main(String[] args) {
    Data s=new Data(); 
 Student.Subject obj=new Student.Subject();// compiler error
    s.ClassMethod();
}
}

Wouldn't something like this be better?

interface Student {
    public abstract void sayHi();
}

class Data implements Student {
    @Override
    public void sayHi() {
        System.out.println("method 2");
    }
}

Yes, you can. Here in the below example, I used Anonymous Class but you can use Lambda Expression also

interface Student {

    public abstract class Subject {

        public abstract void AbstractMethod();
        public void show(){
            System.out.println("Show Method");
        }
    }
}

class Data implements Student {

    public void ClassMethod() {
        System.out.println("method 2");
    }
}

public class NewClass {
public static void main(String[] args) {
    Data s=new Data(); 
 Student.Subject obj=new Student.Subject(){
     public void AbstractMethod(){
            System.out.println("hi");
        }
 };
 obj.show();
 obj.AbstractMethod();
 s.ClassMethod();
}
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM