美文网首页
DAY12Java语言入门基础教学6抽象类、接口

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

作者: 辞cccc | 来源:发表于2019-08-12 19:10 被阅读0次

    抽象类

    定义

    如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
    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

    相关文章

      网友评论

          本文标题:DAY12Java语言入门基础教学6抽象类、接口

          本文链接:https://www.haomeiwen.com/subject/ajwujctx.html