java 部分语法

包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护

相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名;

假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问

权限修饰符

权限修饰符:是用来控制一个成员能够被访问的范围。

可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

权限修饰符:有四种作用范围由小到大(private -> default -> protected - > public )

//Father.java
package modefer;public class Father {private void privateMethod(){       //只能本类访问System.out.println("private");      }protected void protectedMethod(){       //本类,同包中的其他类,其他包的子类中System.out.println("protected");}public  void publicMethod(){System.out.println("public");}public static void main(String[] args) {Father f = new Father();f.privateMethod();f.protectedMethod();f.publicMethod();}
}
--------------------
//Son.java
package modefer.itcast;import modefer.Father;public class Son  extends Father {public static void main(String[] args) {Son s= new Son();s.publicMethod();s.protectedMethod();}
}

成员变量一般私有。

方法一般公开。

如果该成员只希望本类访问,使用private修饰。

如果该成员只希望本类,同一个包下的其他类和子类访问,使用protected修饰。

final

修饰类:表明该类是最终类,不能被继承。

修饰方法:表明该方法是最终方法,不能被重写。

修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次),几乎不用。

package d3_finall;public class Test {public static void main(String[] args) {}
}final class Son{public void eat(){System.out.println("eat");}
}
// class Sonn extends Son{}     //报错,final修饰类,类不能被继承class Animal{public final void die(){System.out.println("都会死");}
}class Dog extends Animal{       //final修饰方法,方法不能被重写//public void die(){      //报错die()' cannot override 'die()' in 'd3_finall.Animal'; overridden method is final//  System.out.println("doge");//}
}
常量

命名规范:英文单词全部大写,多个单词下划线连接起来。

public class constant {public static final String USER_NAME = "张三";public static final String PASS_WORD = "123456";public static final String ADDRESS = "北京";
}
枚举

枚举类都是继承了枚举类型:java.lang.Enum

枚举都是最终类,不可以被继承。

构造器都是私有的,枚举对外不能创建对象。

枚举类的第一行默认都是罗列枚举对象的名称的。

枚举类相当于是多例模式。

package d4_enum;public enum Season {//第一行都是罗列枚举类实例的名称SPRING,SUMMER,AUTUMN,WINTER;
}
抽象类

抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。

当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

抽象方法只有方法签名,不能声明方法体。

一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错。

抽象类中可以没有抽象方法,但是有抽象方法的必须是抽象类

父类的抽象方法,必须在子类中实现,否则这个类也必须定义成抽象类

抽象类不能创建对象,只能被继承

public abstract class Animal {        //abstract 声明public abstract void run();     //不能写方法体代码
}
模板方法模式

使用场景:当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候

实现步骤

定义一个抽象类。

定义两个个方法,一个是模板方法:把相同代码放里面去,不同代码定义成抽象方法

子类继承抽象类,重写抽象方法。模板方法可以加final关键字,因为模板一般不需要重写

接口

声明一个接口interface

接口实现implements

一个类实现接口,必须重写全部接口的全部抽象方法,否则这个类需要定义成抽象类

public interface 接口名{//常量//抽象方法
}
package d8_interface;//声明一个接口,体现一种规范,规范一定是公开的
public interface Test{//JDK8以前的接口中只能有抽象方法和常量//常量//由于接口体现的是规范化思想,规范化默认都是公开的,所以代码层面public static final可以省略不写String ADDRESS = "北京";public static final String ADD = "北京";//2.抽象方法//由于接口体现的是规范化思想,规范化默认都是公开的,所以代码层面public abstract可以省略不写void run();public abstract void go();
}

类和类的关系:单继承

类和接口的关系:多实现

接口和接口的关系:多继承,一个接口可以同时继承多个接口

多继承整合多个接口为同一个接口,便于子类的实现

面向对象三大特征之三:多态

同类型的对象,执行同一个行为,会表现除不同的行为特征

多态的常见形式

父类类型 对象名称 = new 子类构造器
接口 对象名称 = new 实现类构造器

多态中成员访问特点

方法调用:编译看左边,运行看右边

变量调用:编译看左边,运行也看左边

//test.java
package d10_duotai;public class Test {public static void main(String[] args) {Animal a = new Doge();Animal b = new wugu();a.run();                //狗跑的快,编译看左边,运行看右边System.out.println(a.name);         //打印的是父类的名字编译看左边,运行也看左边b.run();                //乌龟跑的很慢,编译看左边,运行看右边System.out.println(b.name);         //打印的是父类的名字编译看左边,运行也看左边}
}
----------------------------
//Animal.java
package d10_duotai;public abstract class Animal {public abstract void run();public String name ="名字";
}
----------------------------
//Doge.java
package d10_duotai;public class Doge extends Animal{@Overridepublic void run(){System.out.println("狗跑的快");}public String name ="doge狗";
}
----------------------------
//wugu.java
package d10_duotai;public class wugu extends Animal{@Overridepublic void run(){System.out.println("乌龟跑的很慢");}public String name = "乌龟";
}

自动类型转换:子类对象赋值给父类类型的变量指向

强制类型转换:从父到子

此时必须进行强制类型转换: 子类 对象变量 = (子类) 父类类型的变量

作用:可以解决在多态下实现子类特有的功能

instanceof:判断关键字左边的变量指向对象的真实类型,是否是右边的类型或者是其子类型

多态小案列
//Test.java
package d1_duotai_demo;public class Test {public static void main(String[] args) {//创建电脑对象Computer c= new Computer("外星人");c.start();//创建鼠标和键盘对象USB u = new KeyBoard("键盘");c.installUSB(u);USB u1 = new Mouse("鼠标");c.installUSB(u1);c.close();}
}
------------------
//Computer.java
package d1_duotai_demo;public class Computer {private  String name;public void start(){System.out.println("电脑开机了");}public void close(){System.out.println("电脑关机了");}//使用多态,提供USB设备的入口public void installUSB(USB usb){//多态usb.connect();//特有功能先判断再强转if(usb instanceof  KeyBoard){KeyBoard k = (KeyBoard) usb;k.keyDown();}else if(usb instanceof Mouse){Mouse m = (Mouse) usb;m.click();}usb.unconnect();}public Computer(){}public Computer(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
------------------------------
//KeyBoard.java
package d1_duotai_demo;public class KeyBoard implements  USB{private String name;public KeyBoard(){}public KeyBoard(String name) {this.name = name;}//特有功能public void keyDown(){System.out.println(name+"被敲击了");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void connect() {System.out.println("键盘连接成功");}@Overridepublic void unconnect() {System.out.println("键盘弹出成功");}
}
----------------------------
//Mouse.java
package d1_duotai_demo;public class Mouse implements USB{public String name;public Mouse(){}public Mouse(String name) {this.name = name;}//特有方法public void click(){System.out.println(name+"被点击了");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void connect() {System.out.println("鼠标连接成功");}@Overridepublic void unconnect() {System.out.println("鼠标弹出成功");}
}
---------------------
//USB.java
package d1_duotai_demo;public interface USB {//接入,拔出共功能void connect();void unconnect();
}

java 部分语法

包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护

相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名;

假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问

权限修饰符

权限修饰符:是用来控制一个成员能够被访问的范围。

可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

权限修饰符:有四种作用范围由小到大(private -> default -> protected - > public )

//Father.java
package modefer;public class Father {private void privateMethod(){       //只能本类访问System.out.println("private");      }protected void protectedMethod(){       //本类,同包中的其他类,其他包的子类中System.out.println("protected");}public  void publicMethod(){System.out.println("public");}public static void main(String[] args) {Father f = new Father();f.privateMethod();f.protectedMethod();f.publicMethod();}
}
--------------------
//Son.java
package modefer.itcast;import modefer.Father;public class Son  extends Father {public static void main(String[] args) {Son s= new Son();s.publicMethod();s.protectedMethod();}
}

成员变量一般私有。

方法一般公开。

如果该成员只希望本类访问,使用private修饰。

如果该成员只希望本类,同一个包下的其他类和子类访问,使用protected修饰。

final

修饰类:表明该类是最终类,不能被继承。

修饰方法:表明该方法是最终方法,不能被重写。

修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次),几乎不用。

package d3_finall;public class Test {public static void main(String[] args) {}
}final class Son{public void eat(){System.out.println("eat");}
}
// class Sonn extends Son{}     //报错,final修饰类,类不能被继承class Animal{public final void die(){System.out.println("都会死");}
}class Dog extends Animal{       //final修饰方法,方法不能被重写//public void die(){      //报错die()' cannot override 'die()' in 'd3_finall.Animal'; overridden method is final//  System.out.println("doge");//}
}
常量

命名规范:英文单词全部大写,多个单词下划线连接起来。

public class constant {public static final String USER_NAME = "张三";public static final String PASS_WORD = "123456";public static final String ADDRESS = "北京";
}
枚举

枚举类都是继承了枚举类型:java.lang.Enum

枚举都是最终类,不可以被继承。

构造器都是私有的,枚举对外不能创建对象。

枚举类的第一行默认都是罗列枚举对象的名称的。

枚举类相当于是多例模式。

package d4_enum;public enum Season {//第一行都是罗列枚举类实例的名称SPRING,SUMMER,AUTUMN,WINTER;
}
抽象类

抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。

当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

抽象方法只有方法签名,不能声明方法体。

一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错。

抽象类中可以没有抽象方法,但是有抽象方法的必须是抽象类

父类的抽象方法,必须在子类中实现,否则这个类也必须定义成抽象类

抽象类不能创建对象,只能被继承

public abstract class Animal {        //abstract 声明public abstract void run();     //不能写方法体代码
}
模板方法模式

使用场景:当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候

实现步骤

定义一个抽象类。

定义两个个方法,一个是模板方法:把相同代码放里面去,不同代码定义成抽象方法

子类继承抽象类,重写抽象方法。模板方法可以加final关键字,因为模板一般不需要重写

接口

声明一个接口interface

接口实现implements

一个类实现接口,必须重写全部接口的全部抽象方法,否则这个类需要定义成抽象类

public interface 接口名{//常量//抽象方法
}
package d8_interface;//声明一个接口,体现一种规范,规范一定是公开的
public interface Test{//JDK8以前的接口中只能有抽象方法和常量//常量//由于接口体现的是规范化思想,规范化默认都是公开的,所以代码层面public static final可以省略不写String ADDRESS = "北京";public static final String ADD = "北京";//2.抽象方法//由于接口体现的是规范化思想,规范化默认都是公开的,所以代码层面public abstract可以省略不写void run();public abstract void go();
}

类和类的关系:单继承

类和接口的关系:多实现

接口和接口的关系:多继承,一个接口可以同时继承多个接口

多继承整合多个接口为同一个接口,便于子类的实现

面向对象三大特征之三:多态

同类型的对象,执行同一个行为,会表现除不同的行为特征

多态的常见形式

父类类型 对象名称 = new 子类构造器
接口 对象名称 = new 实现类构造器

多态中成员访问特点

方法调用:编译看左边,运行看右边

变量调用:编译看左边,运行也看左边

//test.java
package d10_duotai;public class Test {public static void main(String[] args) {Animal a = new Doge();Animal b = new wugu();a.run();                //狗跑的快,编译看左边,运行看右边System.out.println(a.name);         //打印的是父类的名字编译看左边,运行也看左边b.run();                //乌龟跑的很慢,编译看左边,运行看右边System.out.println(b.name);         //打印的是父类的名字编译看左边,运行也看左边}
}
----------------------------
//Animal.java
package d10_duotai;public abstract class Animal {public abstract void run();public String name ="名字";
}
----------------------------
//Doge.java
package d10_duotai;public class Doge extends Animal{@Overridepublic void run(){System.out.println("狗跑的快");}public String name ="doge狗";
}
----------------------------
//wugu.java
package d10_duotai;public class wugu extends Animal{@Overridepublic void run(){System.out.println("乌龟跑的很慢");}public String name = "乌龟";
}

自动类型转换:子类对象赋值给父类类型的变量指向

强制类型转换:从父到子

此时必须进行强制类型转换: 子类 对象变量 = (子类) 父类类型的变量

作用:可以解决在多态下实现子类特有的功能

instanceof:判断关键字左边的变量指向对象的真实类型,是否是右边的类型或者是其子类型

多态小案列
//Test.java
package d1_duotai_demo;public class Test {public static void main(String[] args) {//创建电脑对象Computer c= new Computer("外星人");c.start();//创建鼠标和键盘对象USB u = new KeyBoard("键盘");c.installUSB(u);USB u1 = new Mouse("鼠标");c.installUSB(u1);c.close();}
}
------------------
//Computer.java
package d1_duotai_demo;public class Computer {private  String name;public void start(){System.out.println("电脑开机了");}public void close(){System.out.println("电脑关机了");}//使用多态,提供USB设备的入口public void installUSB(USB usb){//多态usb.connect();//特有功能先判断再强转if(usb instanceof  KeyBoard){KeyBoard k = (KeyBoard) usb;k.keyDown();}else if(usb instanceof Mouse){Mouse m = (Mouse) usb;m.click();}usb.unconnect();}public Computer(){}public Computer(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
------------------------------
//KeyBoard.java
package d1_duotai_demo;public class KeyBoard implements  USB{private String name;public KeyBoard(){}public KeyBoard(String name) {this.name = name;}//特有功能public void keyDown(){System.out.println(name+"被敲击了");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void connect() {System.out.println("键盘连接成功");}@Overridepublic void unconnect() {System.out.println("键盘弹出成功");}
}
----------------------------
//Mouse.java
package d1_duotai_demo;public class Mouse implements USB{public String name;public Mouse(){}public Mouse(String name) {this.name = name;}//特有方法public void click(){System.out.println(name+"被点击了");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void connect() {System.out.println("鼠标连接成功");}@Overridepublic void unconnect() {System.out.println("鼠标弹出成功");}
}
---------------------
//USB.java
package d1_duotai_demo;public interface USB {//接入,拔出共功能void connect();void unconnect();
}