Java接口与继承常见问题
1、接口:
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、2,定义一个Other接口
package com.org.test;public interface Other {
void doOther();
}
3、3,定义实现类
Mainpackage 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、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();
}}
5、类的继承问题:
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,否则编译不通过
}
6、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); }}