生活生產中有些數據是不可變的,作成常量java
使用final修飾的變量成爲常量,不可再次賦值小程序
final修飾的變量必須在聲明的後面直接賦值框架
字面值常量ide
1/3/555aaa、hhh、hehehe學習
自定義常量測試
把變量使用final修飾this
final int area = 960spa
命名自定義常量的時候字母所有大寫,多個單詞使用下劃線鏈接設計
package com.qf.final0;
public class Demo01 {
public static void main(String[] args) {
double pi = Math.PI;
System.out.println(pi);
double pI2 = MathUtil.PI;
System.out.println(pI2);
// 這個圓周率能夠被任意修改,不合理,作成常量不可修改
// MathUtil.PI = 6.666;
double pI3 = MathUtil.PI;
System.out.println(pI3);
}
}
class MathUtil{
// 生活生產中有些數據是不可變的,作成常量
public static final double PI = 3.141592653589793;
}
引用地址不能夠改變對象
對象中的內容能夠改變
被final修飾的類成爲最終的類
這個類不能被繼承,沒有子類
final修飾的方法成爲最終的方法
能夠被所在類的子類繼承使用
不能被重寫
package com.qf.final0;
public class Demo05 {
public static void main(String[] args) {
double pi = Math.PI;
String str = "heiheihei";
System.out.println();
Students s01 = new Students();
// 子類能夠繼承到final修飾的方法
s01.bitCard();
}
}
final class Calculator{
public static int getSum(int...is) {
int sum = 0;
for (int i = 0; i < is.length; i++) {
sum += is[i];
}
return sum;
}
}
// 最終的類沒法被繼承,沒有子類
// class Calculator000 extends Calculator{}
class Student{
String name;
int age;
// 被final修飾的方法能被繼承,不能被重寫
public final void bitCard() {
System.out.println("咱們須要使用小程序在校區附近打卡....");
}
}
class Students extends Student{
/*
public final void bitCard() {
System.out.println("咱們須要使用小程序在校區附近打卡....");
}
*/
}
在java中使用interface聲明的內容成爲接口
接口中的變量只能是公開靜態常量
接口中的方法只能是公開抽象方法
接口不能直接建立對象
接口和測試類
package com.qf.inter;
public class Demo01 {
public static void main(String[] args) {
String field = MyInterface.FIELD;
System.out.println(field);
// 能使用類名直接調用說明是static修飾
String yourField = YourInterface.YOUR_FIELD;
System.out.println(yourField);
// 不能從新賦值說明是final修飾
// YourInterface.YOUR_FIELD = "嘿嘿嘿";
}
}
interface MyInterface{
// 屬性:公開、靜態、常量
public static final String FIELD = "接口中的FIELD";
// 方法:公開、抽象方法
public abstract void show();
}
interface YourInterface{
String YOUR_FIELD = "沒有修飾符的FIELD";
}
驗證public
package com.qf.inter;
public interface Demo02 {
String OUR_FIELD = "Demo02中的OUR_FIELD";
}
package com.qf.final0;
import com.qf.inter.Demo02;
public class Demo06 {
public static void main(String[] args) {
// 在其餘包中也能訪問到,說明默認修飾符是public
String ourField = Demo02.OUR_FIELD;
System.out.println(ourField);
}
}
能夠生產字節碼文件
能夠聲明爲引用類型
不能直接建立對象
擁有Object中全部的方法
接口中全部的屬性都是公開、靜態、常量,默認使用public static final修飾
接口中的方法都是公開、抽象方法,默認使用public abstract修飾
接口中沒有構造方法、動態代碼塊、靜態代碼塊
接口不能直接建立對象
可讓一個類實現接口,重寫接口中的方法
類能夠在繼承其餘類的同時,實現多個接口
而後建立這個類的實例,使用重寫以後的方法
package com.qf.inter;
public class Demo03 {
public static void main(String[] args) {
ACER acer = new ACER();
acer.power();
acer.transfer();
System.out.println("=================");
USB usb = new ACER();
usb.power();
usb.transfer();
}
}
/**
* USB 接口
* 定義了屬性電壓和版本
* 定義了方法充電和傳輸數據
* @author Dushine2008
*
*/
interface USB{
// 屬性
double VOLTAGE = 5.0;
double VERSION = 3.0;
// 方法
public abstract void power();
public abstract void transfer();
}
/**
* 子類宏碁電腦
* 實現接口USB
* @author Dushine2008
*
*/
class ACER implements USB{
接口能夠用做變量的聲明
聲明接口的類型,引用指向實現接口的類建立的對象
這個是向上轉型的多態
package com.qf.inter;
public class Demo04 {
public static void main(String[] args) {
/**
* Dog類
* 繼承Animal
* 實現Runnable接口
* 實現Swiming接口
*/
Dog dog = new Dog("道哥", 2);
dog.run();
dog.swim();
dog.eat();
dog.sleep();
System.out.println("================================");
Animal animal = new Dog();
animal.eat();
animal.sleep();
System.out.println("================================");
Runnable runnable = new Dog();
runnable.run();
System.out.println("================================");
Swimable swimable = new Dog();
swimable.swim();
}
}
/**
* 動物類
* 定義了屬性和方法
* @author Dushine2008
*
*/
class Animal{
String name;
int age;
public Animal() {
super();
}
public Animal(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("不少動物都是雜食性的...");
}
public void sleep() {
System.out.println("大部分動物晚上睡覺...");
}
}
/**
* 能奔跑的接口
* @author Dushine2008
*
*/
interface Runnable{
void run();
}
/**
* 能游泳的接口
* @author Dushine2008
*
*/
interface Swimable{
void swim();
}
/**
* Dog類
* 繼承了Animal,得到了Animal中全部非私有的屬性和方法
* 實現了Swimable接口,重寫了游泳的方法
* 實現了Runnable接口,重寫了奔跑的方法
* @author Dushine2008
*
*/
class Dog extends Animal implements Runnable,Swimable{
public Dog() {
super();
}
public Dog(String name, int age) {
super(name, age);
}
/**
* 來自Swimable中的方法
*/
@Override
public void swim() {
System.out.println("狗子天生就會游泳,狗刨這個姿式來來自狗子...");
}
@Override
public void run() {
System.out.println("狗子奔跑的時候用四條腿,速度比人要快一些....");
}
}
把聲明的父類引用轉換回原來的類型
package com.qf.inter;
public class Demo05 {
public static void main(String[] args) {
/**
* Dog類
* 繼承Animal
* 實現Runnable接口
* 實現Swiming接口
*/
Dog5 dog = new Dog5("道哥", 2);
dog.run();
dog.swim();
dog.eat();
dog.sleep();
System.out.println("================================");
Animal5 animal = new Dog5();
animal.eat();
animal.sleep();
Dog5 dog5 = (Dog5) animal;
dog5.run();
dog5.swim();
dog5.eat();
dog5.sleep();
System.out.println("================================");
Runnable5 runnable = new Dog5();
runnable.run();
Dog5 dog05 = (Dog5) runnable;
dog05.run();
dog05.swim();
dog05.eat();
dog05.sleep();
System.out.println("================================");
Swimable5 swimable = new Dog5();
swimable.swim();
// Runnable r = (Runnable) swimable;
}
}
/**
* 動物類
* 定義了屬性和方法
* @author Dushine2008
*
*/