1、抽象类
package ClassN1;
public abstract class Abstracted {
//抽象类、绝对不能实例化、可以不包括抽象方法,可以有实例方法
//经过子类继承之后,覆盖了抽象的方法,就可以创建子类的实例
//含有抽象方法的类一定是抽象类
private String account;
private String name;
public Abstracted() {
super();
}
public Abstracted(String account, String name) {
super();
this.setAccount(account);
this.name = name;
}
public String getName() {
return name;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public abstract double getMoney();//抽象方法,只有函数声明,没有函数体
}
package ClassN1;
public abstract class Abstracted1 extends Abstracted {//子类继承父类,将继承所有的属性和方法,无论修饰符如何,只是private继承过来没办法使用罢了
private String date;
public Abstracted1(String date) {
super("2301","李明");
this.date = date;
}
public String getName() {//重写/覆盖,发生在子类继承父类时
return "BOBO"; //子类的:函数名,返回值,参数列表与父类完全相同,父类改方法被覆盖
//若这种情况下想使用父类的方法,可以借助super关键字
}
public String getName(String name) {//重载:发生于函数的命名
return "重载"; //要求函数名相同,参数列表必须不同,要么参数类型不同,要么个数不同
}
public abstract String getAddress();////抽象方法,只有函数声明,没有函数体
}
package ClassN1;
public final class Abstracted2 extends Abstracted1{//只能单继承
private String sex;
public Abstracted2(String sex) {
super("2018_04_03");
this.sex=sex;
}
public static void main(String[] args) {
Abstracted2 a=new Abstracted2("男");
System.out.println(a.getAddress());
System.out.println(a.getMoney());
System.out.println(a.getName());
}
@Override
public String getAddress() {
return "地址:玄武区孝陵卫200号";
}
@Override
public double getMoney() {
System.out.println("李明输入账户:"+getAccount()+"密码:"+this.getName());
return 3000;
}
}
2、接口
package ClassN1;
public interface Interface1 {//访问修饰符只能是public 或package,其他修饰符可以有final static
public static final String name1="Interface1" ;//接口中只有常量,没有变量,且类型必须是public static final
public abstract String getName();//接口中的方法只能是public abstract,不能是其他类型
//接口不能有构造器
//接口的使用完美的解决类单继承问题
}
package ClassN1;
public interface Interface2 {
public static final String name="Interface2";
public abstract String address();
}
package ClassN1;
public interface Interface3 extends Interface1,Interface2{//接口可以多继承
public static final String sex="男";
public abstract String getAccount();
}
3、综合及对比
package ClassN1;
public final class Implents1 extends Abstracted implements Interface1,Interface2,Interface3{//单继承多实现
public Implents1() {
}
public static void main(String[] args) {
Implents1 i=new Implents1();
System.out.println(i.getAccount());
System.out.println(i.getName());
System.out.println(i.address());
System.out.println(i.getMoney());
}
@Override
public String getAccount() {
return "3000";
}
@Override
public String address() {
return "孝陵卫200号";
}
@Override
public String getName() {
return "BOBO";
}
@Override
public double getMoney() {
return 50000;
}
//////////////////////////////////////////////////////////////////////////////
//抽象类:
//<访问修饰符> abstract <class_name> extends <parents class_name>{//////抽象类单继承
//<访问修饰符> <static><final> <data type> <data name>;
//<访问修饰符> abstract <method_name>(pramaneter-list);//可以有其他的具体方法
//}
//////////////////////////////////////////////////////////////////////////////
//接口:
//<访问 修饰符> interface <interface_name> extends <parent interface_name1,parent interface_name2,.....>{//接口多继承
//public static final <data type> <data name>;////只能是public static final变量
//public abstract <return_type> <method_name> (pramaneter-list);//只能是public abstract方法
//}
//////////////////////////////////////////////////////////////////////////////
//抽象类和接口的区别:
//1、单继承多实现
//2、抽象类:extends 接口:implements
//3、抽象类:自己的数据成员,非抽象的成员方法 接口:只能是public static final变量 、public abstract方法
//4、无论是继承抽象类还是实现接口都必须实现所有的方法
//5、抽象类:变量默认为package 接口:public static final
//6、在抽象类中添加一个是实现方法,继承其的子类都具有该方法 但接口:全报错
//7、还有一中解决多继承的方法是使用内部类
}