DAY12Java语言入门基础教学6抽象类、接口

2019-08-12  本文已影响0人  辞cccc

抽象类

定义

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
PS 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

如何定义一个抽象类

//定义一个抽象类管理安卓开发学习路线
//抽象类里面定义使用这个功能就可以选择实现的方法或者属性
//抽象类不能实例化 不能创建抽象类的对象
abstract class BaseAndroidStudy{
//定义一个代码块
{
System.out.println("锻炼身体");
  }

//定义一个人属性 用于保存数据
public String javaBook;
public Dream dream;

//提供一个有参构造方法
public BaseAndroidStudy(String javaBook,String dream){
this.javaBook = javaBook;
this.dream = new Dream();
this.dream.name = dream;
  }

//定义一个静态常量
public final String CBOOK = "C Primer";

//定义一个抽象方法 不需要实现 子类来实现
public abstract void studyC();

//定义一个方法 已经确定了这个方法的具体实现
public void studyJava(){
System.out.println("参加培训");
  }

//定义一个内部类用于管理每个人的梦想
class Dream{
public String name;
public void show(){
System.out.println("my dream is"+name);
    }
  }
}

如何引用一个抽象类

/**使用一个抽象类
* 如果继承一个抽象类 就必须实现这个抽象类里面的抽象方法
* 如果不实现抽象方法 也可以把这个类定义为抽象类
*/
class Student extends BaseAndroidStudy{
String name;
@Override
public void studyC(){
System.out.println("read watch");
  }
public Student(String name,String bookname,String dream){
super(bookname,dream);
this.name = name;
  }
}

注意事项

  1. 抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象
  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
  4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

接口

定义

接口是对协定进行定义的引用类型。
格式:

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

特性

  1. 接口里面默认的变量都是static final
interface testInterface{
public static final int I = 100;
int COUNT = 20;
}

默认情况下不需要自己写 public static final

  1. 接口里面不能定义代码块,构造方法,普通/对象/实例方法
    接口里面只有抽象方法 默认就是public abstract
    接口里面可以有内部类 public static class
void test1();
public void test2();
public abstract void test3();
  1. 如果需要定义已经有实现的方法 使用default

接口的使用

public class xxxx implements 接口名称

接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法

DEMO

目的

J5I2KD4@80I%$R3R0NS726R.png

实现

  1. 管理界面的抽象类Activity定义
import java.util.ArrayList;
public abstract class Activity {
    public ArrayList<View>childs=new ArrayList<>();
    public abstract void onCreat();
    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+"的图片显示");
        }
        childs.add(v);
    }
}
  1. 创建一个类View 管理视图显示和事件监听
public class View {
    String backgroundColor;
    String borderColor;
    onClickListener listener;


    public interface onClickListener{
        void onClick(View v);
    }
    //用于接收触摸事件
    public void getTouchEvent(){
        listener.onClick(this);
    }
}

3.创建主界面MainActivity

public class MainActivity extends Activity implements View.onClickListener{
    Button btn;
    ImageView img;
    //构造方法
    public MainActivity(){
        //当界面被创建就自动调用onCreate方法
        onCreat();
    }
    @Override
    public void onCreat(){
        //布局
        //添加一个按钮
        btn = new Button("share","red");
        //添加一张图片
        img = new ImageView("JayZhou");

        addChild(btn);
        addChild(img);

        //1.
        //如果一个控件需要监听事件 那么就必须实现监听事件的接口
        //告诉按钮是谁在监听事件
        btn.listener = this;
        //2.
        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("按钮被点击了");
    }
}
  1. 创建按钮对象Button
public class Button extends View{
    String title;
    String titleColor;

    public Button(String title,String titleColor){
        this.title = title;
        this.titleColor = titleColor;
    }
}
  1. 创建一张图片
public class ImageView extends View {
    String picture;
    public ImageView(String picture){
        this.picture = picture;
    }
}
  1. 外部使用
public class MyClass {
    public static void main(){
        MainActivity main =new MainActivity();
        main.touch();
    }
}

心得

感觉比昨天更能理解抽象类这些的了,但是少了一次睡懒觉的机会,血亏。在慢慢的看之前的内容,有种顿悟的感觉,很多之前不理解的东西现在要能接受一些了。我也好希望像范超凡一样自我感觉良好噢 图片.png
上一篇下一篇

猜你喜欢

热点阅读