• JavaSE第七天



    复习
    1.访问修饰符
      private       方法,变量     本类
       默认         类,方法,变量  同一包
      protected     方法,变量      不同包(继承关系)
      public        类,变量,方法   任何地方

    2.方法的重写
       继承关系
       方法名,参数列表,返回类型(子类<=父类)相同
       访问修饰符 :子类>=父类
       异常(非运行时异常):子类<=父类
       
       作用:扩展 父类方法的功能

    3.继承构造方法的调用
      子类创建对象,默认调用父类的无参构造方法
      如果父类没定义无参的构造方法,那么子类使用super调用父类的构造方法

    4.多态:对象的多态
       父类声明=子类创建

       编译时多态 - 重载
       运行时多态 - 重写

       应用

       对象造型:父子类之间的强制转换
                 instanceof


    5.static
       使用:类名.static的成员
       static修饰变量:
          成员变量:类变量和实例变量

       static修饰方法:
           静态方法:直接访问静态成员
           不能重写
       static块
           static{}

      父类静态块->子类的静态块->父类的构造块->父类的构造方法
      ->子类的构造块->子类的构造方法

    6.final
       变量:常量  常量值不能改变???
       方法:不能被重写
       类:不能有子类

       final int[] NUM = {1,2,3};

       NUM[0] =11;
    ---------------------------------------------------------
    abstract
     
      1.抽象方法:由abstract修饰的方法
      2.特点:没有方法体
      3.抽象类:由abstract修饰的类    ------  模块
      4.特点:不能创建对象
      5.抽象类中可以没有抽象方法
      6.抽象类由子类创建对象
      7.子类可以创建对象,实现所有的抽象方法,
        没有实现全部的抽象方法,当前类声明为抽象类


    练习:定义一个类表示形状,提供获取周长和面积的方法,
          然后给这个类提供子类:矩形 - 正方形,椭圆 - 圆形

    1)定义抽象类Shape,两个抽象方法double getArea()和
                                   double getLength()
    2)定义子类Rectangle,(构造方法传参)
    3)定义子类Oval,(构造方法传参) 周长:3.14*a*b
                                     面积:2*3.14*b+4*(a-b)
    4)定义Rectangle的子类Square
    5)定义Oval的子类Circle
    6)测试:计算各种图形的面积周长
    -----------------------------------------------------------
    interface

    1.定义接口
       interface 接口名{
          变量:int x = 10;   public static final修饰的
          方法:jdk1.8之前,抽象方法,可以省略abstract,
                           默认的访问修饰符public
                void f();
       }

    2.使用接口 implements

       实现接口的类,要实现接口中的所有方法,才可以创建对象
       如果不实现接口中的所有方法,当前类必须为abstract的类

    3.接口和接口之间是继承关系

        interface A{}
        interface B extends A{}
        interface C{}

    4.类和接口之间是实现,可以实现多个接口
        class Demo extends Object1 implmenents B,C{}

    练习:

    1.利用接口做参数,写个计算器,能完成加减乘除运算。

    (1)定义一个接口ICompute
        含有一个方法int computer(int n, int m)。

    (2)设计四个类Add,Sub, Mul,Div分别实现此接口,
         完成加减乘除运算。

    (3)设计一个类UseCompute,
         类中含有方法:
        public void useCom(ICompute com, int one, int two),
        此方法能够用传递过来的对象调用computer方法完成运算,
        并输出运算的结果。

    (4)设计一个主类Test,
         调用UseCompute中的方法useCom来完成加减乘除运算。
    2.按如下要求编写Java程序:

    (1)定义接口A,里面包含值为3.14的常量PI和
        抽象方法double doubleArea(double radius)。//πr*r

    (2)定义接口B,里面包含
         抽象方法void setColor(String c)。

    (3)定义接口C,该接口继承了接口A和B,
        里面包含抽象方法
        void volume(double radius,double height)//πr*r*h

    (4)定义圆柱体类Cylinder实现接口C

    ---------------------------------------------------------
    接口jdk8新特性:

    1.接口中可以定义普通方法
        default void test(){
            System.out.println("test");
        }
        static void test2(){
            System.out.println("test2");
        }

    2.default修饰的方法由实现类调用
       static修饰的方法可以由接口名直接调用
       接口不能创建对象


    3.实现类的接口和父类定义了同名方法,如何访问
        访问父类的方法

    4.如果两个接口中都定义了同名方法,如何访问?出现编译错误
        子类必须重写同名方法

    5.函数式接口:
       接口中只有一个抽象方法。

    接口和抽象类的区别
             抽象类                接口
       模板类                   不同类型的公共的行为(规范JDBC)
       不能多继承               可以多继承
       有构造方法               没有构造方法
       变量是普通的变量         都是公有静态常量
       普通方法                 普通方法由 default或者static修饰
       抽象方法没有默认访问修饰符   访问 修饰符是public
     
    ----------------------------------------------------------
    内部类

    1.类体内部类

            //可以访问外部类的成员
        //不可以定义静态成员,但是可以定义静态常量
        //Demo1.Inner inner = new Demo1().new Inner();
        class Inner{
            final static int b =0;
            int a;
            void test3(){
                x = 0;
                y = 9;
                System.out.println("test3");
            }
        }

            //可以访问外部静态成员
        //可以定义静态和非静态成员
        //Demo2.Inner inner = new Demo2.Inner();
        static class Inner{
            int a=0;
            static int b = 9;
            void f(){
                
                y = 9;
                System.out.println(y);
            }
        }

    2.方法内的内部类
             void f(){
            int a = 9;
            //可以访问外部类的成员
            //不能定义静态成员,但是可以定义静态常量
            //方法内的变量被内部类访问后,变量别表示为常量
            class Inner{
                int b=0; //jdk1.7之后默认常量
                final static int c = 0;
                void f(){
                    int r = a+0;
                    x = 0;
                    y = 9;
                    System.out.println("!!!!!");
                }
            }
            new Inner().f();
        }

    3.匿名类
           //创建子类的对象
        Object obj = new Object(){
            @Override
            public String toString() {
                return "Hello";            
            }
        };
        //接口的实现类
        IDemo demo = new IDemo(){
            @Override
            public void f() {
                System.out.println("接口方法的实现");            
            }        
        };

        //方法的参数使用匿名类实现
            public void test(IDemo demo){
            demo.f();
        }    
        public static void main(String[] args) {
            Demo4 demo4 = new Demo4();
            demo4.test(new IDemo(){
                @Override
                public void f() {
                    System.out.println("接口方法的实现");            
                }        
            });
        }

    ------------------------------------------------------

    匿名类练习

    interface IA{  void ma(); }
    class MyClass {
        public static void method(IA ia){
            System.out.println(“in method” );
            ia.ma();
        }
    }
    public class TestInnerClass{
        public static void main(String args[]){
        MyClass.method(new IA(){
            public void ma(){
               System.out.println(“ma in anonymous inner class” );
            }
        });
        class MyMaClass implements IA{
             public void ma(){
                  System.out.println(“ma in local inner class” );
             }
        }
        MyClass.method(new MyMaClass());
        }
    }

    作者:赵瑞鑫。支持原创,从你我做起。
  • 相关阅读:
    从字符串中找到中文
    Extjs前端细节处理
    《高效能人士的7个习惯》读后摘记
    千分位设置
    Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。
    java报告(一)编程打印一个三角形的乘法口诀表
    计算机组成原理 课程设计报告
    汇编语言作业(七)
    汇编语言作业(六)
    汇编语言作业(五)
  • 原文地址:https://www.cnblogs.com/Winer-Jiu/p/13419923.html
Copyright © 2020-2023  润新知