static關鍵字詳解+抽象類+介面+內部類
阿新 • • 發佈:2021-07-14
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();
}
}