Java接口与抽象类常见问题

1,定义一个接口Some

package com.org.test;
public interface Some {
    //注:接口默认是public abstract且必须是public权限,否则编译不通过,如果没有添加或者添加不全,编译程序会自动帮你添加完整。
    void doSome();
    //接口中定义的变量默认是public static final的,如果没有添加或者添加不全,编译程序会自动帮你添加完整。
    int x=10;
    public static int y=10;
}
2,定义一个Other接口

package com.org.test;
public interface Other {
    void doOther();
}
3,定义实现类Main

package com.org.test;
public class Main implements Some,Other{
    public static void main(String[] args) {
        System.out.println(Some.x);
        System.out.println(Some.y);
        Some some=new Main();
        some.doSome();
        Other other=(Other)some;
        other.doOther();
        //接口的匿名内部类实现doSome方法并在内部类中添加匿名内部类的doService方法
        Some some2=new Some() {            
            @Override
            public void doSome() {
                System.out.println("Some2:做一些!");                
            }
            public void doService(){
                System.out.println("Some2:做一些服务!");        
            }
        };
    }
    @Override
    public void doSome() {
        System.out.println("Main:doSome");        
    }
    @Override
    public void doOther() {
        System.out.println("Main:doOther");       
    }
}
4,定义抽象类

package com.org.test;
abstract class AbstractSome implements Some{
    //注:抽象类中的抽象方法必须加上public abstract,编译程序不会自动补全,没有的话会编译报错
    public abstract void doSome();
    public void doService(){
        System.out.println("做一些服务!");
    }
    public static void main(String[] args) {
        //抽象类在创建实例时必须要实现其抽象方法,否则会编译不通过(匿名内部类)
        AbstractSome some=new AbstractSome() {            
            @Override
            public void doSome() {//内部为匿名内部类
                System.out.println("实现doSome方法!");                    
            }
            //匿名内部类重写外部类service方法
            public void doService(){
            }
        };
        some.doService();//此处调用的是匿名内部类的方法,故此打印出来的为空
        some.doSome();        
    }
}
-------------------------类的继承问题

1,定义一个父类

package com.org.extend;
public class Some {
    protected int x;
    Some(int x){
        this.x=x;
    }
    void doService(){
        System.out.println("Some:doService!");
    }
     //注:重新hashCode方法必须要加上public权限,否则编译不通过
    public int hashCode(){
        return 99;
    }
    //注:只有抽象类或者接口中才允许出现抽象方法,抽象类要加上abstract,否则编译不通过        
}
2,定义一个子类

package com.org.extend;
public class Other extends Some{
    Other(int x) {
        //注:继承父类,如果子类中没有定义变量x,不可用this.x,否则会编译失败!
        super(x);
    }
    @Override
    void doService() {
        System.out.println("Other:doService!");
    }
    public static void main(String[] args) {
        Other other=new Other(10);
        other.doService();        
        Some some=new Other(10);
        some.doService();
        System.out.println(some.x);
    }
}


猜你喜欢

转载自blog.csdn.net/qq_35255384/article/details/78988191