ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE第六天

2020-08-02 18:00:24  阅读:287  来源: 互联网

标签:Sub int void class 第六天 static JavaSE public


复习

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

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

构造方法:
   定义:方法名和类名相同,没有返回类型
   来源:不定义->默认    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);
    }
}

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

标签:Sub,int,void,class,第六天,static,JavaSE,public
来源: https://www.cnblogs.com/Winer-Jiu/p/13419918.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有