目錄
一、final
什么是final?
二、接口概述
?什么是接口?
與抽象類(lèi)的區(qū)別
常量接口
接口傳參多態(tài)
四、內(nèi)部類(lèi)
什么是內(nèi)部類(lèi)?
成員內(nèi)部類(lèi)
靜態(tài)內(nèi)部類(lèi)
局部?jī)?nèi)部類(lèi)
一、final
什么是final?
final從字面意思來(lái)看時(shí)最終的,不可改變的含義,它可以修飾在類(lèi)、方法以及變量中
值得注意的是:final修飾類(lèi)則該類(lèi)不能被繼承,修飾方法則該方法不能被重寫(xiě),修飾變量則該變量變?yōu)槌A?/p>
代碼示例
/*final*/ class Animal{//不能被繼承
public /*final*/ void eat() {//不能被重寫(xiě)
}
}
class Dog extends Animal{
public void eat() {
}
}
public class Test1 {
public static void main(String[] args) {
}
}
class A{
//final修飾的成員變量,沒(méi)有初始化,需要賦值
//a.直接賦值 b.動(dòng)態(tài)代碼塊 c.構(gòu)造方法
final String name ;/*= "b";*/
//final修飾的靜態(tài)變量——靜態(tài)常量(狀態(tài)值——被判斷)
//a.直接賦值 b.靜態(tài)代碼塊
static final int age;/* = 66;*/
/*{
name = "b";
}*/
public A() {
name = "b";
}
static {
age=33;
}
String sex;
}
public class Test2 {
public static void main(String[] args) {
final int a = 5;
//a=5;//final修飾的基本類(lèi)型變量,值不可變
final int[] arr=new int[] {1,2,3};
arr[0] = 66;//final修飾的引用變量,值可變
final A aa = new A();
//aa = new A();//final修飾引用變量,地址不可變
aa.sex = "男";//final修飾引用變量,屬性值可變
}
}
二、接口概述
?什么是接口?
接口是指特殊的抽象類(lèi),可以看成抽象的事務(wù),它的方法也是抽象的,需要通過(guò)實(shí)現(xiàn)來(lái)類(lèi)完成
與抽象類(lèi)的區(qū)別
同:生成class文件,不能實(shí)例化對(duì)象,作為引用類(lèi)型來(lái)使用,均可調(diào)用Object方法
異:屬性都是公開(kāi)的靜態(tài)常量,方法都是公開(kāi)的抽象方法,不能有構(gòu)造方法,沒(méi)有代碼
interface MyInter{
//public static final:公開(kāi)的靜態(tài)常量
String name = " 占山";
//public abstract:公開(kāi)的抽象方法
void teat();
//public MyInter() {}沒(méi)有構(gòu)造方法
//{}沒(méi)有動(dòng)態(tài)代碼塊
//static {沒(méi)有靜態(tài)代碼塊
}
//實(shí)現(xiàn)類(lèi)的處理:1.將自身變?yōu)槌橄? 2.重寫(xiě)接口的抽象方法
/*abstract */class MyImpl implements MyInter{
@Override
public void teat() {
}
}
實(shí)際應(yīng)用場(chǎng)景,在之后的案例中會(huì)更多的使用這些場(chǎng)景
interface fireable{//一般把接口后綴able具備某種能力
String name = "吳彥祖";
void fire() ;//能力的具體體現(xiàn)
}
interface ITest{//標(biāo)記型接口——沒(méi)有抽象方法的接口
}
interface ITest2 extends ITest,fireable{//接口的多繼承
}
class WaWa implements fireable{//實(shí)現(xiàn)多個(gè)接口
@Override
public void fire() {
System.out.println(" 吳彥祖會(huì)演戲");
}
public void eat() {
System.out.println("吳彥祖正在吃飯");
}
}
public class Test3 {
public static void main(String[] args) {
//作為引用類(lèi)型來(lái)使用——多態(tài)
//調(diào)用:
fireable fire = new WaWa();
fire.fire();//可以調(diào)用實(shí)現(xiàn)類(lèi)重寫(xiě)的方法
//接口引用指向?qū)崿F(xiàn)類(lèi)對(duì)象
//但不能調(diào)用類(lèi)中獨(dú)有方法,強(qiáng)轉(zhuǎn)
if(fire instanceof WaWa) {//強(qiáng)轉(zhuǎn)成實(shí)現(xiàn)類(lèi)對(duì)象——強(qiáng)轉(zhuǎn)會(huì)有隱患
WaWa wa = (WaWa) fire;
wa.eat();
}
}
}
常量接口
//常量接口:接口中,定義了靜態(tài)常量
interface Inter{
int HTTP_OK=200;//靜態(tài)·常量規(guī)范
int HTTP_ERROR=404;
}
public class Test5 {
public static void main(String[] args) {
int state = getPageState();
if(state==Inter.HTTP_OK) {
System.out.println("成功返回頁(yè)面");
}else if(state==Inter.HTTP_ERROR) {
System.out.println("失敗的頁(yè)面狀態(tài)");
}
}
private static int getPageState(){//當(dāng)成具體實(shí)現(xiàn)
return Inter.HTTP_OK;
}
}
接口傳參多態(tài)
interface USB1{
void run();
}
class Mouse1 implements USB1{
public void run() {
System.out.println("鼠標(biāo)正在連接電腦");
}
}
class Disk1 implements USB1{
public void run() {
System.out.println("硬盤(pán)正在連接電腦");
}
}
class Computer1 {
public void connect(USB1 usb1) {
usb1.run();
}
}
public class Test1_1 {
public static void main(String[] args) {
Computer1 com = new Computer1();
com.connect(new Mouse1());
com.connect(new Disk1());
}
}
四、內(nèi)部類(lèi)
?
什么是內(nèi)部類(lèi)?
在一個(gè)類(lèi)的內(nèi)部又包含了完整的類(lèi),它可以生成獨(dú)立的class文件,可使用外部類(lèi)的私有成員且不破壞封裝性,可以將外部類(lèi)的一些功能交給內(nèi)部類(lèi)完成,有成員內(nèi)部類(lèi)、靜態(tài)內(nèi)部類(lèi)以及局部?jī)?nèi)部類(lèi)
成員內(nèi)部類(lèi)
class Outter{
private String name="張三";
public int add(int a,int b) {
return new Inner().addFun(a, b);//注意這兩行的寫(xiě)法
}
class Inner{//成員內(nèi)部類(lèi)
private String name="李四";
//private int addFun(int a,int b);不能使用static
public int addFun(int a,int b) {
System.out.println(name);//輸出內(nèi)容優(yōu)先作用域小的;用域下
//System.out.println(Outter.this.name);//張三
return a+b;
}
}
}
public class Test1 {
public static void main(String[] args) {
Outter.Inner inner = new Outter().new Inner();
System.out.println(inner.addFun(4, 5));
}
靜態(tài)內(nèi)部類(lèi)
只需要在內(nèi)部類(lèi)中加上static進(jìn)行修飾文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-542271.html
class A{
private int age = 30;
static class B{
static String name;
public void show() {
//System.out.println(age);因?yàn)榧虞d時(shí)機(jī)問(wèn)題,在靜態(tài)內(nèi)部類(lèi)中不能使用外部類(lèi)屬性
System.out.println("靜態(tài)內(nèi)部類(lèi)方法的調(diào)用");
}
}
}
public class Test2 {
public static void main(String[] args) {
A.B b=new A.B();//static的資源需要類(lèi)來(lái)調(diào)
b.show();
//簡(jiǎn)化方式
B b2 = new B();//這里要導(dǎo)包才不會(huì)出錯(cuò)
b2.show();
}
局部?jī)?nèi)部類(lèi)
不用加public進(jìn)行修飾文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-542271.html
class AA{
public void show() {
int age =10;//在局部?jī)?nèi)部類(lèi)中使用局部變量時(shí)會(huì)變?yōu)槌A?final
/*局部?jī)?nèi)部類(lèi)不能加public修飾*/
class BB{//定義的局部?jī)?nèi)部類(lèi)
//只在當(dāng)前方法體調(diào)用
public void test() {
System.out.println(age);
System.out.println("局部?jī)?nèi)部類(lèi)");
}
}
new BB().test();
}
}
public class Test3 {
public static void main(String[] args) {
new AA().show();//調(diào)用方法
}
}
到了這里,關(guān)于Java小白的學(xué)習(xí)之路——day12的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!