用abstract修饰的类就是抽象类
抽象类存在的几个必要条件
1)必须用abstract 修饰类
2 )类中要有抽象方法
3)要有构造函数(可写可不写,系统会默认生成一个不带参数的构造函数)
4)抽象类和抽象方法不能用final修饰,因为抽象类是子类来继承的,抽象方法是子类继承后来根据实际需要来重写的
注释:有抽象方法的类一定就是抽象类。如果子类中没有实现父类中的抽象方法,在子类中还应该继续把该方法定义为抽象方法
package network.com;
import org.junit.Test;
public abstract class Country {
private String country;
private String color;
private String continent;
private String area;
public abstract void Contient(String continent,String country);
public abstract void Area( String area,String country);
//final abstract void hehe();//不能用final修饰抽象方法
public static void main(String[] args) {//这里我是把主函数写抽闲类中的,,,,我们往下看接口时可不可以这样子写
Country ch=new china();//这里就是一个典型的多态的应用,父类指向子类的引用
ch.Contient("亚洲","中国" );
ch.Area("960万平方公里", "中国");
Country Am=new china();
Am.Contient("北美洲","美国");
Am.Area("962.909万平方公里", "美国");
}
}
class china extends Country{//继承父类Country
@Override//重写实现父类中Contient()的抽象方法
public void Contient(String continent,String coutry) {
System.out.println(coutry+"位于"+continent);
}
@Override//重写实现父类中Area()的抽象方法
public void Area(String area,String country) {
System.out.println(country+"国土面积为:"+area);
}
}
显示如下
中国位于亚洲
中国国土面积为:960万平方公里
美国位于北美洲
美国国土面积为:962.909万平方公里
接口(interface)
接口和抽象类其实是一样的原理的,都实现了抽象方法,简化了代码的操作性,使得代码有了具有更强的条理性和约束性
但是;;;;;
接口与抽象类是有区别的,而且在实用中大多数是用接口实现的
1)接口中只能定义常量和抽象方法
2)接口中没有构造函数这一说法,也就没有构造函数
3)接口用interface 修饰,接口中的抽象方法用public abstract 修饰 接口中的变量用public static final修饰
4)接口的抽象方法只能用继承类来实现,使用implement关键字修饰,接口之间可以继承,但不能实现接口中的方法,如果一个类实现了一个接口,那么该接口中的所有方法都要实现
5)一个类只能继承一个抽象类,但一个类却可以实现多个接口,间接的实现了多继承,同时接口之间也可以实现多多继承
代码实例
> /**
* 定义一个接口里面定义了常量和抽象方法
*/
public interface Country {
public static final int HEIGHT=16;//定义常量
public static final int WIDTH=20;
public abstract void country(String country ,String are);//定义抽象方法
public abstract void are(String country,String continent);
}
/**
* 定义一个接口里面只写抽象方法
*/
public interface House {
public abstract void address(String add);
public abstract double income(int perso,float average_income );
}
/**
* 定义一个类实现多个接口
*/
public class Person implements House,Country{//多接口的实现
@Override
public void country(String country, String are) {//对于接口中的抽象方法一一实现(重写)
System.out.println(country+"国土面积为:"+are);
}
@Override
public void are(String country, String continent) {
System.out.println(country+"位于"+continent);
}
@Override
public void address(String add) {
System.out.println("首都是"+add);
}
@Override
public double income(int perso,float average_income) {
return perso*average_income;
}
}
/**
* 测试类
*/
public class Test01 {
public static void main(String [] args){
Person people=new Person();//初始化实例对象
people.are("中国", "亚洲");//调用重写后的方法
people.address("北京");
people.country("中国", "960万平方公里");
double income=people.income(5, 10000);
System.out.println("家庭年输入为:"+income);
}
}
显示结果
中国位于亚洲
首都是北京
中国国土面积为:960万平方公里
家庭年输入为:50000.0
这里我只是将抽象类与接口做了一个简单的初始化介绍,对于接口的应用在实际编程中可谓每时每刻都会用到,根据实际问题找出对应解决办法才是编程的艺术,菜鸟冒昧了 望大神们多多指教