java 抽象类、接口使用

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、还有一中解决多继承的方法是使用内部类
	
}

猜你喜欢

转载自blog.csdn.net/cincoutcin/article/details/79806785