zoukankan      html  css  js  c++  java
  • JavaSE第六天

    复习

    面向过程:关注点->过程(步骤)
    面向对象:关注点->对象

    类和对象:
       类->抽象
       对象->实体

    构造方法:
       定义:方法名和类名相同,没有返回类型
       来源:不定义->默认    public   无参
             如果定义->不默认构造方法了    
       作用:创建对象
       调用:new + 构造方法

    变量的分类:
        成员变量和局部变量
        成员变量整个类内,局部变量局限于方法内
        void f(int x){
           int y;
           .....(x)
        }

    this:
       表示本类对象
       this.成员
       this(实参列表); 构造方法的第一条有效语句
       
    封装:变量定义private   set/get方法  构造方法
       实现封装:private的 变量
                 提供set/get方法

    继承:
       子类可以继承父类所有成员(除构造方法)
       extends
       继承定义:
       子类父类:
       单一继承
       Object:
       is a  ??
    super:
       父类的对象
       super.成员
       super(实参列表):构造方法的第一条有效语句
    -----------------------------------------------------
    1.访问修饰符
      private         变量,方法      本类

      默认            类,变量,方法   同一个包

      protected       变量,方法       同一个包,不同包(继承关系)


      public         类,变量,方法    任何地方

    -----------------------------------------------
    2.方法重写
       继承关系:
       父类和子类  方法名相同,参数列表相同
                   方法的返回类型形同 (如果继承关系,子类的类型<=父类)
                                     
       子类方法的访问修饰符>=父类
       异常:子类方法的异常(非运行时异常)<=父类

       什么重写 ->扩展父类方法的功能

       私有方法不能被重写

    3.继承关系中构造方法的调用规则
       1)子类创建对象时,总是默认调用父类无参的构造方法
       2)如果父类没有无参的构造方法,使用super()调用指定的构造方法


       class A{
          int x ;
          int y;
          public A(int x,int y){
        .........("A");
          }
       }

       class B extends A{
         public B(int x,int y){
            super(x,y);
        .........("B");
          }
           
       }

       B b  = new B(1,2);

    ----------------------------------------------------
    构造方法练习
    class MyClass{
        int value;
    }
    public class TestMyClass{
        public static void main(String args[]){
          MyClass mc1 = new MyClass();
          MyClass mc2 = new MyClass(10);
          System.out.println(mc1.value);
          System.out.println(mc2.value);
       }
    }
     

    -------------------------------------------------
    构造方法的调用
    class Super{
        public Super(){
          System.out.println("Super()");
        }                                         Super() Sub()
        public Super(String str){                 Super() Sub()  Sub(int)
           System.out.println("Super(String)");   Super(String) Sub(String)
        }
    }
    class Sub extends Super{
         public Sub(){
            System.out.println("Sub()");
         }
         public Sub(int i){
             this();
             System.out.println("Sub(int)");
         }
         public Sub(String str){
             super(str);
             System.out.println("Sub(String)");
         }
    }
    public class TestSuperSub{
         public static void main(String args[]){
             Sub s1 = new Sub();
             Sub s2 = new Sub(10);
             Sub s3 = new Sub("hello");
         }
    }
    ------------------------------------------------------------------------
        

    4.多态
       定义:一种类型的变量可以指向不同的对象
          Animal a1 = new Dog();
          Animal a2 = new Bird();

       编译时的多态:方法的重载
          class A{
              void f(){
            ....("f");
              }
              void f(int x){
            ....("f"+x);
              }
          }

         A a1 = new A();
         A a2 = new A();
         
        a1.f();
        a2.f(1);


       运行时多态:方法的重写
        在Animal 类中定义eat   Dog和Bird类重写了此方法
        Animal a1 = new Dog();
        Animal a2 = new Biard();

        
     
       a1.eat();
       a2.eat();

       在编译时,看变量的声明类型
       运行时,如果子类重写了父类的方法,动态绑定到子类上,运行子类的方法

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

    多态练习:

    class Super{
        public void method(){
            System.out.println("method() in Super");
        }
        public void method(int i){
            System.out.println("method(int) in Super");
        }
    }
    class Sub extends Super{
         public void method(){
             System.out.println("method() in Sub");
         }
         public void method(String str){
             System.out.println("method(String) in Sub");
         }
    }
    public class TestSuperSub{
         public static void main(String args[]){
             Super s = new Sub();
             s.method(10);
             s.method();
             s.method("hello");//编译错误
         }
    }
    -----------------------------------------------------------------------
    多态的应用

        方法的参数定义为父类类型或者接口类型
        public void feed(Animal animal){
            animal.eat();
        }

    对象造型:(对象强制转换)
              通过instanceof判断
        public void test(Animal animal){
            if(animal instanceof Dog){
                ((Dog) animal).d();
            }if(animal instanceof Bird){
                ((Bird) animal).b();
            }
        }


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

    static:修饰变量,方法,静态块
     
    1.修饰变量:
      变量:成员-> 类变量(静态变量): 由static修饰的成员变量
                    实例变量   :没有static修饰
             局部
       类变量和实例变量的区别:
              类变量对所有对象共享,公用
              实例变量是归对象所有,不是公用
       静态变量可以由类名调用

       静态变量:类加载器加载类的时候初始化的

       变量的初始化过程:

       static int x = 5;
       int x = 6;

    2.修饰方法:
       静态方法:由static修饰   
       实例方法:没有static修饰

        int x = 1;
        static int y = 2;
        void f(){

        }
        static void f2(){

        }

        void test1(){
            x = 2;  //ok
            y = 3;
            f();   //ok
            f2();
        }

        static void test2(){
            x = 2;  //error
            y = 3;
            f();    //error
            f2();
        }

       静态方法是否可以重写?不能
                       重载?可以
                       继承?可以

       构造方法是否可以定义静态的?不可以

       静态方法是否可以使用this,super? 不可以



    3.静态块:


        static{

        }

       写到类体中,在类加载时,执行一次
    ---------------------------------------------------------------------


    final



    abstract



    interface

    静态方法


    class TestSuper {
        public static void ma(){
           System.out.println("Super ma");
        }
        public void mb(){
            System.out.println("Super mb");
        }
    }
    class TestSub extends TestSuper {
         public static void ma(){
            System.out.println("Sub ma");
        }
        public void mb(){
           System.out.println("Sub mb");
        }
    }
    public class Test {
         public static void main(Stirng[] args){
             TestSuper ts = new TestSub();
             ts.ma();    //super ma
             ts.mb();    //sub mb
         }
    }


    ——————————————————————————————————————————

    静态块

        public class A{
            static int x = 9;
            static{
                x = 10;
                y = 90;
                z = 20;
            }
            static int y = 100;
            static int z;
        }        
                      x = 10 y = 100,z = 20




    public class Test{
        private static Test tester = new Test(); //step 1
        private static int count1;               //step 2
        private static int count2 = 2;           //step 3
        public Test(){                           //step 4
            count1++;
            count2++;
            System.out.println("" + count1 + count2); // 1 1  
        }
        public static Test getTester(){          //step 5
            return tester;
        }
        
        public static void main(String[] args){
           Test.getTester();
        }


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

    静态块和构造块

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

    class A{                      1  11   2  3  22  33
       static{
          ........("1");
       }
       {
            .......("2");
        }
        public A(){

            .......("3");
        }
    }
    class B extends A{
       static{
          ........("11");
       }
       {
            .......("22");
        }
        public B(){
            .......("33");
        }
    }

    new B();
    -----------------------------------------------------------------


    练习:
        class A{
            static D d;
            static {.....("A1"); d = new D();}
            {.........("A2");}
            public A(){.........("A3");}
        }

        class B extends A{
            static C c = new C();
            static {.....("B1");}
            {.........("B2");}
            public B(){.........("B3");}}

        class C{
            public C(){........("C");}
        }

        class D extends C{
            public D(){........("D");}
            
        }
        new B();  A1  C  D   C   B1  A2  A3  B2  B3
        
    ---------------------------------------------------------
    final:
     
       final可以修饰类,方法,变量
       fianl修饰的变量:常量
                        常量名:一般名字的所有字母都大写,如果有多个单词组成,单词之间用_
                        格式:final int PRICE = 10;
                        特点:不能改

       final修饰的方法:不能重写
       final修饰类:不能被继承  


     final 修饰的方法可以被继承

    final练习



    class Super{
        public final void m1(){
           System.out.println("m1() in Super");
        }
        public void m1(int i){
           System.out.println("m1(int) in Super");
        }
    }
    class Sub extends Super{
        public void m1(int i){
           System.out.println("m1(int) in Sub");
        }
        public void m1(double d){
           System.out.println("m1(double) in Sub");
        }
    }
    public class Test {
        public static void main(String args[]){
           Sub s = new Sub();
           s.m1();
           s.m1(10);
           s.m1(1.5);
        }
    }

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

    作者:赵瑞鑫。支持原创,从你我做起。
  • 相关阅读:
    如何把阿里图标库的图标生成代码并应用于自己的项目
    【记事件】
    极光推送,为什么IOS有的手机一直收不到推送。
    浮点型的数据对比。
    MySQL通过show processlist查看项目的mysql写的有问题
    thinkPHP5实现简单的多图上传
    mac终端运行/终止jar包
    referer参数和addslashes()函数的骚路子
    小技巧|addslashes绕过
    团队博客七
  • 原文地址:https://www.cnblogs.com/Winer-Jiu/p/13419918.html
Copyright © 2011-2022 走看看