1. 程式人生 > 其它 >static關鍵字詳解+抽象類+介面+內部類

static關鍵字詳解+抽象類+介面+內部類

static關鍵字詳解

package com.baidu.oop.demo07;

//static
public class Student {

    private static int age;//靜態的變數
    private double score;//得靜態的變數

    public void run(){

    }
    public void go(){

    }
    public static void main(String[] args) {
        Student s1 = new Student();

        System.out.println(Student.age);
        System.out.println(s1.age);
        System.out.println(s1.age);
    }




}

package com.baidu.oop.demo07;

public class Person {

    {//2:賦初始值
        //程式碼塊(匿名程式碼塊)
        System.out.println("匿名程式碼塊");
    }

    static {//1  只執行一次
        //靜態程式碼塊(匿名程式碼塊)
        System.out.println("靜態程式碼塊");
    }
    public Person(){
        //3
        System.out.println("構造方法");
    }

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("========================");
        Person person2 =new Person();
    }
}

package com.baidu.oop.demo07;
import static java.lang.Math.PI;
import static java.lang.Math.random;

public class Test {

    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }


}

抽象類

  • abstract修飾符可以用來修飾方法,也可以用來修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類
  • 抽象類中可以沒有抽象方法,但是有抽象類方法的類,一定要宣告為抽象類
  • 抽象類,不能使用new關鍵字來建立物件,它是用來讓子類繼承的。
  • 抽象方法,只有方法的宣告,沒有方法的實現,他是用來讓子類實現的。
  • 子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類。
package com.baidu.oop.demo08;

//abstract 抽象類:類   單繼承~   (介面可以多繼承)
public abstract class Action {

    //約束~有人幫我們實現~
    //abstract,抽象方法,只有方法名字,沒有方法的實現!
    public abstract void doSomething();


    //1.不能new出來這個抽象類,只能靠子類去實現它:~約束
    //2.抽象類中可以寫普通方法~
    //3.抽象方法必須在抽象類中~
    //抽象的抽象:約束~

    //思考題?   new , 存在構造器嗎?
    //存在的意義   抽象出來~  提高開發效率,後期可擴充套件性
}
package com.baidu.oop.demo08;

public class Application {
    public static void main(String[] args) {


    }
}
package com.baidu.oop.demo08;

//抽象類的所有方法,繼承了他的子類,都必須要實現它的方法~除非~
public class A extends Action {
    @Override
    public void doSomething() {

    }
}

介面

  • 普通類:只有具體實現
  • 抽象類:集體實現和規範(抽象方法)都有!
  • 介面:只有規範!自己無法寫方法~專業的約束!約束和實現分離:面向介面程式設計
  • 介面就是規範,定義的是一組規則,體現了現實世界中“如果你是...則必須能...”的思想。如果你是天使,則必須能飛。如果你是汽車,則必須能跑。如果你是好人,則必須幹掉壞人;如果你是壞人,則必須欺負好人。
  • 介面的本質是契約,就像我們人間的法律一樣,制定後大家都需要遵守。
  • OO的精髓是對物件的抽象,最能體現這一點的就是介面。為什麼我們討論涉及模式只針對具備了抽象能力的語言(比如c++,java,c#等)就是因為設計模式所研究的,實際上就是如何讓和人力的去抽象。

宣告類的關鍵字是class,宣告介面的關鍵字是interf

package com.baidu.oop.demo09;

// 抽象的思維~JAVA   架構師

// interface 定義的關鍵字 , 介面都需要實現類
public interface UserService {

    // 常量~ public static final
    int AGE = 99;

    // 介面中的所有其實都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}
package com.baidu.oop.demo09;

//抽象類:extends~
//類 可以實現介面implements 介面
//實現了介面的類,就需要重寫介面中的方法

//多繼承~利用介面實現多繼承
public class UserServiceImpl implements UserService,TimeServices{
    @Override
    public void add(String name){

    }
    @Override
    public void delete(String name){

    }
    @Override
    public void update(String name){

    }
    @Override
    public void query(String name){

    }
    @Override
    public void timer(){

    }
}

package com.baidu.oop.demo09;

public interface TimeServices {
    void timer();
}

作用: 1.約束 2.定義一些方法,讓不同的人實現~ 10--->1 3.public abstract 4.public static final 5.介面不能被例項化介面中沒有構造方法 6.implement介面可以實現多個介面 7.必須要重寫介面中的方法

內部類(奇葩~)

  • 內部類就是在一個類的內部在定義一個類,比如,A類中定義了一個B類。那麼B類相對A類來說就成為內部內,而A類相對B類來說就是外部內了。
  • 1.成員內部類
  • 2.靜態內部類
  • 3.區域性內部類
  • 4.匿名內部類
  • 5.lambada表示式

內部類

package com.baidu.oop.demo10;

public class Outer {

    private int id=10;
    public void out(){
        System.out.println("這是外部類的方法");
    }

    public  class Inner {
        public void in(){
            System.out.println("這是內部類的方法");
        }

        //獲得外部類的私有屬性~
        public void getID(){
            System.out.println(id);
        }

    }
}

package com.baidu.oop.demo10;

public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //通過這個外部類來例項化內部類~
        Outer.Inner inner= outer.new Inner();
        inner.getID();
    }
}
package com.baidu.oop.demo10;

public class Outer {

    //區域性內部類
    public void method(){

        class  Inner{
            public void in(){

            }
        }
    }

}



package com.baidu.oop.demo10;


public class Test {
    public static void main(String[] args) {
        //Apple apple = new Apple();
        //沒有名字初始化類,不用講例項儲存到變數中
        new Apple().eat();

        UserService userService = new UserService(){

            @Override
            public void hello(){

            }
        };
    }
}

class Apple{
    public void eat(){
        System.out.println("1");
    }

}
interface UserService{

    void hello();
}
package com.baidu.oop.demo10;

public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();

    }
}