1. 程式人生 > >java 06 重寫(覆蓋) final 內部類

java 06 重寫(覆蓋) final 內部類

方法過載
-------------------
方法名稱一樣 ,只是型別不一樣叫過載
在有繼承的前提下才有方法的過載。

 

方法覆蓋(重寫)
---------------------------
1.和父類方法名稱相同
2.不能是私有方法
3.super可以訪問父類方法
4.注意事項(引數的形態必須一致,名稱無所謂。)
  a.許可權要大於等於父類的許可權。(父類中可以是 void consume(int money){} 子類中是public void consume(int money){})

  b.靜態的無法覆蓋非靜態的  即靜態覆蓋靜態的,非靜態的覆蓋非靜態的。 必須是一致的。

  c.子類中的所有的建構函式都會預設訪問父類的空引數的建構函式,父類沒有空構造需要子類傳引數訪問

  d.因為每一個建構函式的第一行都有一條預設的語句  super();

 

class OverrideDemo1{
public static void main (String[] args){
RiceMan2 s2 = new RiceMan2();
s2.consume(570);
}

}

class RiceMan{
public void consume(int money){
if (money<500){
System.out.println("消費了" + money+"w");
}
else {
System.out.println("消費限制,不能超過500W");
}
}
}

//繼承父類的,子方法中跟父類的方法一樣的話就會覆蓋掉
class RiceMan2 extends RiceMan{
public void consume(int money){
if (money<1000){
System.out.println("消費了" + money+"w");
}
else {
System.out.println("消費限制,不能超過1000W");
}

//super.consume(money); 可以通過super的方法呼叫父類的函式
}
}

 

 

 

簡單的重寫方法

--------------------------------------------------------

class OverrideDemo1{
public static void main (String[] args){
RiceMan2 s2 = new RiceMan2();
s2.consume();
}

}

class RiceMan{
public String name;
public String color;
public void consume(){
System.out.println("爬500W");
}
}

//繼承父類的,子方法中跟父類的方法一樣的話就會覆蓋掉
class RiceMan2 extends RiceMan{
public void consume(){
System.out.println("爬1500W");
}
}

 

 

 

final

----------------------------------

1.可以修飾方法、類、變數

      類: final calss Dog     //final修飾類那麼就不能繼承

     方法: final void add()     //final修飾方法那麼就不能重寫

     欄位: final void add()     //final修飾方法那麼就不能重寫

final

-------------------------------

1.修飾方法

     方法:

final class Dog{}不能被繼承 不能被重寫

2.修飾的函式

   方法:final class(){} 不能被重寫

3.修飾的欄位

 

類的成員

---------------------------------

1.成員變數

2.成員函式

3.構造程式碼塊

4.建構函式

5靜態程式碼塊

6.內部類

 

內部類:

----------------------------------------

1.定義在class內部的類。

2.編譯產生的outerclass$innerc.class

 

 new Benz().fire();呼叫內部類中的方法

 

 

加final的修飾class

-----------------------------------------------------

class FinalDeom{
public static void main(String[] args){
Jing8 j = new Jing8 ();
j.watch();
}
}

final class Dog{
public void watch(){
System.out.println("來人了~~");
}
}

class Jing8 extends Dog{
public void watch(){
System.out.println("問一下~~");
super.watch();
}
}

 

加final 修飾方法  不能被重寫會報錯

-----------------------------------

class FinalDeom{
public static void main(String[] args){
Jing8 j = new Jing8 ();
j.watch();
}
}

class Dog{

//final  修飾方法  不能被重寫
public final void watch(){
System.out.println("來人了~~");
}
}

class Jing8 extends Dog{
public void watch(){
System.out.println("問一下~~");
super.watch();
}
}

 

final 修飾常量 不能被賦值

--------------------------------------------

class FinalDeom{
public static void main(String[] args){
Jing8 j = new Jing8 ();
j.name = "王春梅";
j.watch();
System.out.println(j.name);
}
}

class Dog{
//常量
public final String name ="哈哈哈";
public void watch(){
System.out.println("來人了~~");
}
}

class Jing8 extends Dog{
public void watch(){
System.out.println("問一下~~");
super.watch();
}
}

 

習題

---------------------------------------------

 

class FinalDeom2{
public static void main(String[] args){
Benz c = new Benz ();
c.fire();
c.color = "red";
System.out.println(c.color);
c.tires = 5;
System.out.println(c.tires);
c.run();

}
}

class Car{
public String color;
public int tires;
public void run(){
System.out.println("200無敵~~");
}
}

class Benz extends Car{
private String brand ="BENZ";
public final void fire(){
System.out.println("bombom~~");
}
}

 

 

 

呼叫內部類

-----------------------------------------------

class FinalDeom2{
public static void main(String[] args){
Benz c = new Benz ();
c.run();

}
}

class Car{
public String color ="黑色";
public int tires;
public void run(){
new Benz().fire();//匿名呼叫內部類中的方法
System.out.println("200無敵~~");
}
class Benz {
public final void fire(){
System.out.println("bombom~~");
}
}


}