zoukankan      html  css  js  c++  java
  • 10_接口丶内部类丶权限修饰符

    Day10笔记

    课程内容

    1、接口

    2、内部类

    3、Eclipse

    4、包

    5、权限修饰符

    接口

    概述

    1、广义的接口:一切定义规则的都是接口,一切用于两者交互的方式都是接口

    2、Java中的接口:用于定义方法名称、方法功能的规则

    3、好处:

            将【方法的实现】和【方法的使用】分离开,两者的耦合性就降低了

            提高了开发效率

    接口的特点

    1、接口使用interface关键字声明

            interface 接口名称 {

                    方法的声明;

    }

       编译完成之后,仍然是一个.class的字节码文件

    2、接口中的内容:

            可以声明抽象方法:只能有方法的声明,不能有方法的实现

            作用:规定方法的名称、功能、返回值、参数

    3、接口的实现类:

            实现:定义一个类,将接口中的抽象方法全都实现,这个过程,就称为“实现接口”

            关键字:implements,格式:

                    class  实现类类名  implements  接口名 {

                            对接口中的所有抽象方法进行重写(实现)

    }

    4、接口的实例化:

            结论:接口不能创建对象

            解决:通过实现类来实例化,定义实现类,实现接口中的方法,实现类创建对象并调用               方法

            说明:可以使用接口类型的引用,指向实现类对象(接口的多态)

    5、接口的实现类的前途:

            1、如果实现类中没有重写完接口中的全部方法,那么该类型还是一个抽象类,不能创建对象;

            2、如果实现类重写了接口中所有的抽象方法,那么该类型就可以变成一个具体类,可以创建对象。

    代码示例

    class Demo01_接口特点 {

             public static void main(String[] args) {

                      MyImpl mi = new MyImpl();

                      mi.test1();

                      mi.test2();

                      //接口的引用,指向实现类的对象:接口的多态

                      MyInter m = new MyImpl();

                      m.test1();

                      m.test2();

             }

    }

     

    interface MyInter {

             public abstract void test1();

             public abstract void test2();

    }

     

    class MyImpl implements MyInter {

             @Override

             public void test1() {

                      System.out.println("test1");

             }

     

             @Override

             public void test2() {

                      System.out.println("test2");

             }

    }

    接口中成员的特点

    1、成员变量:

            不能定义变量,只能定义常量

            默认会在成员变量前面加上public static final关键字,建议手动加上

    2、构造方法:

            没有

            1、接口不需要创建对象,所以不需要有构造方法

            2、接口的实现类的构造方法,不会访问所实现的接口的构造方法,因为实现类有自己的父类,访问的是父类的构造方法

    3、成员方法:

            只能是抽象方法,不能是非抽象方法

            默认会在成员方法前面加上public abstract,建议手动加上

    代码示例

    class Demo02_接口中成员的特点 {

             public static void main(String[] args) {

                      //说明a前面默认添加了一个static

                      System.out.println(MyInter.a);

                      //说明a前面默认添加了一个final,变成了常量

                      //MyInter.a = 20;

             }

    }

     

    interface MyInter {

             public static final int a = 10;

     

             //void test1();

    }

     

    class MyImpl extends Object implements MyInter {

            

    }

    类与类、类与接口、接口与接口的关系

    1、类与类:

            继承的关系,关键字extends

            支持单继承、不支持多继承、支持多层继承

    2、类与接口:

            实现的关系,关键字implements

            可以单实现,也可以多实现(一个实现类,可以同时实现多个接口:一个儿子可以有多个干爹),没有多层实现(实现类一旦实现一个接口,就变成了类,不能再被实现了)

            【多实现的格式】:

            class 实现类类名 implements 接口1, 接口2...{

                    重写所有接口中的所有抽象方法

    }

     

    一个类,可以在继承一个父类的同时,实现多个接口

    【实现格式】:

    class 类名 extends 父类类名 implements 接口1, 接口2... {

             重写父类和所有接口中的所有抽象方法

    }

    3、接口与接口

            继承关系,关键字extends

            支持单继承,支持多继承,支持多层继承

            【多继承】格式:

            interface Inter1 extends Inter2, Inter3 {

                    继承了Inter2和Inter3的所有抽象方法

    }

     

    4、接口和抽象类的比较:

            1、语法上:接口可以多实现,抽象类只能单继承

            2、设计:

                    抽象类:用于定义事物本身具有的功能和特征,定义的是最原始的固有的描述

                    接口:用于定义扩展出来的功能和方法,定义的一般是后天学习训练而来的能力

    代码示例1

    class Demo03_接口与类的关系 {

             public static void main(String[] args) {

                      System.out.println("Hello World!");

             }

    }

     

    interface A {

             public abstract void testA();

    }

     

    interface B {

             public abstract void testB();

    }

     

    abstract class C {

             public void testC1() {

                      System.out.println("c1");

             }

     

             public abstract void testC2();

    }

     

    class D extends C implements A, B {

             @Override

             public void testC2() {

                      System.out.println("c2");

             }

     

             @Override

             public void testA() {

                      System.out.println("a");

             }

     

             @Override

             public void testB() {

                      System.out.println("b");

             }

    }

    代码示例2

    class Demo04_接口与接口的关系 {

             public static void main(String[] args) {

                      System.out.println("Hello World!");

             }

    }

     

    interface Inter1 {

             public abstract void test1();

    }

     

    interface Inter2 {

             public abstract void test1();

    }

     

    interface Inter3 extends Inter1, Inter2 {

             //随意从Inter1或者Inter2中继承一个就行

    }

    USB接口案例

    代码示例1

    class Demo05_USB接口案例 {

             public static void main(String[] args) {

                      Computer c = new Computer();

                      Mouse m = new Mouse();

                      c.开机();

                      c.useMouse(m);

                      c.关机();

             }

    }

     

    class Computer {

             public void 开机() {

                      System.out.println("电脑启动");

             }

     

             public void useMouse(Mouse m) {

                      m.use();

             }

     

             public void 关机() {

                      System.out.println("关闭电源");

             }

    }

     

    class Mouse {

             public void use() {

                      System.out.println("鼠标移动");

             }

    }

    代码示例2

    class Demo06_USB接口案例改进 {

             public static void main(String[] args) {

                      Computer c = new Computer();

                      Mouse m = new Mouse();

                      KeyBoard kb = new KeyBoard();

                      c.开机();

                      c.useUSB(m);

                      c.useUSB(kb);

                      c.关机();

     

             }

    }

     

    class Computer {

             public void 开机() {

                      System.out.println("电脑启动");

             }

     

             public void useUSB(USB usb) {

                      usb.use();

             }

     

             public void 关机() {

                      System.out.println("关闭电源");

             }

    }

     

    interface USB {

             public abstract void use();

    }

     

    class Mouse implements USB {

             public void use() {

                      System.out.println("鼠标移动");

             }

    }

     

    class KeyBoard implements USB {

             public void use() {

                      System.out.println("键盘录入");

             }

    }

    内部类

    概述

    1、定义在内部的类,就是内部类

    2、根据内部类位置的不同:

            成员内部类:类中方法外

                    普通的成员内部类

                    私有的成员内部类

                    静态的成员内部类

            局部内部类:方法中

    3、表现形式的不同:

            有名字的内部类

            匿名内部类【常用】

    普通的成员内部类

    1、定义位置:

            类中方法外

    2、定义格式:

            直接使用class定义内部类即可

    3、内部类特点:

            1、可以访问外部类的成员,包括私有成员(因为内部类也是外部类的成员之一)

            2、外部类或者其他类访问内部类的成员,必须先创建内部类对象

    4、创建对象的格式:   

            外部类类名.内部类类名 内部类对象名 = new 外部类类名().new 内部类类名();

            内部类对象名.内部类的成员

    代码示例

    class Demo07_普通的成员内部类 {

             public static void main(String[] args) {

                      Body.Heart bh = new Body().new Heart();

                      bh.speak();

             }

    }

     

    class Body {

             private double height = 149.0;

     

             class Heart {

                      int beats = 90;

     

                      public void speak() {

                               System.out.println(height + "..." + beats + "...心脏扑通扑通的跳");

                      }

             }

     

             public void test() {

                      Heart h = new Heart();

                      System.out.println(h.beats);

             }

    }

    私有的成员内部类

    1、在普通成员内部类的基础上,加一个private关键字修饰这个内部类

    2、访问方式:

            1、其他类,不能直接访问私有的成员内部类

            2、在外部类中,定义一个公有的访问方式,创建私有成员内部类对象,调用对象方法,将来可以让外界间接地访问私有成员内部类,并且调用私有成员内部类方法

    代码示例

    class Demo08_私有成员内部类 {

             public static void main(String[] args) {

                      Body b = new Body();

                      b.useShen();

             }

    }

     

    class Body {

             private double height = 149.0;

     

             private class Shen {

                      int age = 40;

     

                      public void go() {

                               System.out.println(height + "..." + age + "...该走心得时候别找我!!");

                      }

             }

     

             public void useShen() {

                      Shen s = new Shen();

                      s.go();

             }

    }

    静态的成员内部类

    1、在普通成员内部类的基础上,加一个static关键字修饰这个内部类

    2、在类中的静态成员,访问的时候不需要创建该静态成员所在类的对象,可以直接通过类名访问;所以静态成员内部类也不需要创建外部类对象,就可以直接访问;但是静态成员内部类中的非静态成员,需要先创建静态内部类对象之后,才能访问。

    3、一个类是否需要创建对象,不取决于该类是否静态,而是取决于你要访问的是该类的静态成员还是非静态成员。

    4、创建静态内部类对象的格式:

            外部类类名.内部类类名 内部类对象名 = new 外部类类名.内部类类名();

    代码示例

    class Demo09_静态的成员内部类 {

             public static void main(String[] args) {

                      Body.Gan bg = new Body.Gan();

                      bg.speak();

             }

    }

     

    class Body {

             private static double height = 149.0;

     

             static class Gan {

                      String color = "black";

     

                      public void speak() {

                               System.out.println(height + "..." + color + "...求你了别喝了受不了了");

                      }

             }

    }

     

    局部内部类

    1、定义在方法中的内部类

    2、定义在方法中的任何内容(无论是局部变量、还是局部内部类),在方法之外,都不能直接访问

    3、只能在方法中,创建局部内部类对象,调用内部类对象的方法。外界调用内部类所在的方法,间接地访问方法中的内部类

    代码示例

    class Demo10_局部内部类 {

             public static void main(String[] args) {

                      test();

             }

     

             public static void test() {

                      String need = "继续吃";

                      class Wei {

                               int size = 666;

     

                               public void speak() {

                                        System.out.println(need + "..." + size + "...你吃不是因为我饿,是因为嘴巴寂寞");

                               }

                      }

     

                      Wei w = new Wei();

                      w.speak();

             }

    }

    匿名内部类

    1、没有名字的内部类

    2、定义匿名内部类的前提:

            1、有一个父类

            2、或者实现了某一个接口

    3、定义一个匿名内部类对象的格式:

            new 父类类型或者接口类型() {

                    重写父类中的或者接口中的方法;

    }

    4、本质:

            创建了一个接口的实现类对象

            或者是一个父类的子类对象

            说明:更多强调的是对象和某个接口或者父类的关系,而不是对象所属类的名称

    代码示例

    class Demo11_匿名内部类 {

             public static void main(String[] args) {

                      IPlayImpl ip = new IPlayImpl();

                      ip.playGame();

     

                      new IPlay() {

                               @Override

                               public void playGame() {

                                        System.out.println("wanyouxi");

                               }

                      }.playGame();

     

                      IPlay i = new IPlay() {

                               @Override

                               public void playGame() {

                                        System.out.println("玩youxi");

                               }

                      };

                      i.playGame();

             }

    }

     

    class IPlayImpl implements IPlay {

             @Override

             public void playGame() {

                      System.out.println("玩游戏");

             }

    }

     

    interface IPlay {

             public abstract void playGame();

    }

    Eclipse

    概述

    1、开发工具:

            记事本

            加强型的记事本(EditPlus)

            集成开发环境(IDE:Integrated Development Environment)

    2、继承开发环境:

            Eclipse:日食,免费,开源,可扩展

            MyEclipse:收费

            Idea:收费

    Eclipse的下载

    1、www.eclipse.org

    2、Downloads----最新版本-----download packages//下载绿色版本的压缩包

    3、选择 企业级开发的版本,Eclipse IDE for Enterprise Java Developers

    4、选择下载源:选择中国的即可

    Eclipse的安装

    由于下载的是绿色版本的安装包,直接加压缩即可

    看到了eclipse.exe就说明解压成功了

    Eclipse的简单使用

    1、双击eclipse.exe工具,看到如下提示框:

     

            说明:1、如果没有看到这个界面,那说明没有把jdk安装好、或者path环境变量没有配置好;2、Workspace:工作空间,用于存储一个一个的工程的地方,说白了,就是存储代码的地方。

    2、点击launch,开始,看到欢迎界面,关闭欢迎界面,看到开发的主界面:

      

    3、在工程的资源管理器中,鼠标右键,选择new,选择other,如下界面:

      

    4、选择java Project,如下界面:

      

    5、添加工程名称,点击finish,如下界面:

       

            说明:表示要做打开java工程,就需要切换到java工程常用的小窗口组合上去

    6、点击OpenPerspective,在左侧的工程中,选择src,右键,选择new,选择class,如下:

     

    7、填写类名、包名,勾上主方法,点击finish

      

    8、编辑代码,无需编译(自动编译),点击绿色按钮来运行

     

    View和Perspective

    1、View:在eclipse中运行的一个一个的小窗口,每个小窗口都有自己的特殊功能

            Package Explorer:包资源管理器,用于查看整个工作空间中的所有工程

            代码编辑的view:代码编辑的作用

            Console:用于显示运行结果的view(控制台)

            Outline:大纲view,显示当前类型中的所有属性、方法、内部类等

    2、有关view的一个操作:

            自己操作显示哪些view

            Window----show view----选择自己需要的view即可

    3、Perspective:

            1、做不同类型的开发,需要使用到不同的view组合

            2、不同的view组合就称为不同的Perspective

            3、经常做的开发需要使用哪些view,已经比较固定了,所以eclipse给我们提供了常用的Perspective

    4、常用的Perspective:

            Java Perspective:用于做基础的java开发,包括了package explorer、console、outline、代码编辑view

            JavaEE Perspective:用于做开发网站的java开发,包括了Project explorer、Mark、Server、Data Source Explorer、outline等view

            Debug Perspective:用于做程序的调试,可以实现程序的单步运行,包括了debug、breakpoints、variables、expressions等view

    5、有关Perspective的操作:

            1、窗口乱了,可以如下操作:

                      Window----perspective----reset Perspective

            2、可以自定义自己需要的Perspective:

                    Window----Perspective----save Perspective as:新建自己常用的perspective

    Eclipse的常用配置

    1、配置字体:

            使用ctrl + 放大字体

            使用ctrl - 缩小字体

    2、去掉不需要的注释:

           

    3、去掉悬浮提示:

     

            说明:需要看悬浮提示的时候使用键盘F2

    Eclipse的内容辅助键

    1、alt + /:自动生成代码,代码格式记忆不清楚时,使用这个来做一些提示:

    2、举例:

            Main + alt + /:生成主方法

            Syso + alt + /:生成输出语句

            自动生成类名、对象名、提示构造方法

            遍历数组:找到最近的一个数组遍历

    Eclipse的常用快捷键

    1、ctrl + n:新建,新建文件、新建类、新建包、新建工程

    2、Ctrl + shift + f:格式化代码

    3、Ctrl + shift + o:删除不需要的导包语句,补充需要的导包语句

    4、Ctrl + /:给选中的代码进行单行注释;给选中的代码去掉单行注释

    5、Ctrl + shift + /:给选中的代码进行一个多行注释

    6、Ctrl + shift + :给选中的代码去掉多行注释

    7、Alt + ↑:将选中的代码向上移动一行

    8、Ctrl + alt + ↓:将选中的代码向下复制一行

    9、Ctrl + d:删除选中的行,连换行符也一起删掉

    10、Alt + shift + r:给变量重命名(所有该变量一起改名字)

    11、F2:修改类名,所有引用该类型的地方都会发生改变

    基本的编辑快捷键:

            Ctrl :A、C、X、V、Z、Y

    快速生成一个自定义类的方法

    1、自定义类中的各种方法,可以使用快捷键生成

    2、类中的成员变量,需要自己定义,成员变量的内容无法预测;

    3、Alt + shift + s:操作有关源代码的快捷键

    4、C:从父类生成各种构造方法(一般是空参构造)

    5、O:根据自己的字段生成对应的构造方法

    6、R:生成字段对应的get、set方法

    7、S:生成字段对应的toString方法

  • 相关阅读:
    hdu1754线段树入门
    hdu1247 字典树模板
    完全背包 poj 1384
    hdu 1541 树状数入门
    hdu 2665 划分树模板
    winhex分析磁盘目录结构(未完待续)
    取出表单中元素的js代码
    c语言检测cpu大小端模式
    firefox的cookie
    c移位实现求余
  • 原文地址:https://www.cnblogs.com/man-tou/p/10635922.html
Copyright © 2011-2022 走看看