抽象类和接口
抽象类
抽象类 abstract,就相当于一个模板,而且抽象类和普通类唯一的区别就是抽象类里面有抽象方法,抽象类里面定义使用这个功能就可以选择实现的方法或属性,抽象类也不能实例化,不能创建抽象类的对象,例如我们要知道代码运行时间代码引用
abstract class TimeTemplate {
public abstract void code();
public void calculate(){
long start=System.currentTimeMillis();
code();
long end=System.currentTimeMillis();
System.out.println(end-start);
}
}
class MyCode extends TimeTemplate{
@Override
public void code() {
//写自己的测试代码
int total = 0;
for (int i = 0; i < 100000; i++){
total += i;
}
}
}
上面的就是定义了一个抽象类,然后在main函数里面就可以实现对代码运行时间的测量
接口
- 就是定义一套方法,用于对象之间的通信
- 接口里面默认变量都是static final 常量 默认情况下不需要自己写public static 常量
- 接口里面不能定义代码块
- 接口里面不能定义构造方法
- 接口里面不能添加普通/对象/实例方法
- 只有抽象方法,默认就是public abstract
- 使用implements实现一个窗口
- 一个接口可以继承多个接口
例如下面的代码就是对上面事实的最好体现,代码引用
interface testInterface{
public static final int I=100;
int COUNT=20;
void test();
class inner{
int name;
public void show(){
System.out.println("内部类");
}
}
}
interface testInterface2 extends testInterface{
public static final int I=100;
int COUNT=20;
void test();
void test2();
class inner{
int name;
public void show(){
System.out.println("内部类");
}
}
}
class PDDClass implements testInterface2,testInterface{
@Override
public void test() {
testInterface2.inner in=new testInterface2.inner();
in.show();
}
@Override
public void test2() {
}
}
class Te{
public static void main(String [] args){
testInterface2 t=new PDDClass();
}
}
抽象类和接口的综合运用
比如我们要做一个按钮,可以显示图片,这是我们的逻辑框架
于是我们就可以根据我们已经学习的抽象类和接口的知识来解决这个问题
我们要创建六个类Activity Button MainActivity MyDemo View ImagineView,其中Activity类是抽象类,View作为一个父类,具体代码如下
public abstract class Activity {
//保存这个界面的所以子视图
public ArrayList<View>childs=new ArrayList<>();
public abstract void onCreate();
public abstract void onDestory();
public void addchild(View v){
if(v instanceof Button){
Button btn=(Button)v;
System.out.println(btn.title+"按钮显示到桌面上了");
}
if(v instanceof ImageView){
ImageView iv=(ImageView)v;
System.out.println(iv.picture+"的图片显示到桌面了");
}
System.out.println("");
childs.add(v);
}
}
public class View {
String backgroundColor;
String borderColor;
//记录谁想监听我这个事件
//
//所有的视图都要监听事件
//定义内部接口 封装
public OnClickListener listener;
public interface OnClickListener{
//定义一套方法 约束外部使用这些方法来监听事件
public abstract void onClick(View v);
}
public void getTouchEvent(){
listener.onClick(this);
}
public class Button extends View {
String title;
String titleColor;
public Button(String title,String titleColor){
this.title=title;
this.titleColor=titleColor;
}
}
public class ImageView extends View {
public String picture;
public ImageView (String picture){
this.picture=picture;
}
}
public class MainActivity extends Activity implements View.OnClickListener {
Button btn;
ImageView img;
public MainActivity(){
onCreate();
}
@Override
public void onCreate() {
btn=new Button("分享","红色");
img=new ImageView("周杰伦");
addchild(btn);
addchild(img);
btn.listener=this;
img.listener=new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("图片被点击了");
}
};
//如果一个控件需要监听事件 那么就必须
//告诉按钮谁在监听事件
}
public void touch(){
btn.getTouchEvent();
img.getTouchEvent();
}
@Override
public void onDestory() {
//销毁之前需要做点什么
}
@Override
public void onClick(View v) {
System.out.println("按钮被点击了");
}
}
在最后的创建的MyDemo类里面实现就可以了
public static void main(String [] args){
MainActivity main=new MainActivity();
main.touch();