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){
Car  c = new Car  ();
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~~");
}
}


}

//内部类访问外部类的局部变量需要用final修饰局部变量

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

class InnnerDeom{
public static void main(String[] args){
Car Ben = new Car();
Ben.run();

}
}

class Car {
public String color = "黑色";
public int tirs ;

public void run(){
//内部类访问外部类的局部变量需要用final修饰局部变量
final String key ="DaSA";

class Engine {
public void fire(){
System.out.println("插入钥匙" +key);
System.out.println("打火");
}
}

new Engine().fire();
System.out.println("200 开始run");
}


}

外部类访问其他的内部类,可以采用 Ben.new Engine().fire(); 的方式

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

class InnnerDeom3{
public static void main(String[] args){
Car Ben = new Car();
Ben.new Engine().fire();

}
}

class Car {
public String color = "黑色";

class Engine {
public void fire(){
System.out.println("打火");
}
}


}

外部类访问其他的内部类,可以采用 Ben.new Engine().fire(); 的方式

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

class InnnerDeom3{
public static void main(String[] args){
Car Ben = new Car();
new Car.Engine().fire();

}
}

class Car {
public String color = "黑色";

    static class Engine {
public void fire(){
System.out.println("打火");
}
}


}

访问外部类的变量

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

class InnnerDeom3{
public static void main(String[] args){
Car Ben = new Car();
Ben.new Engine().fire();

}
}

class Car {
public String color = "黑色";
public int ties = 4;

class Engine {
public int ties = 4;
public void fire(){
//访问外部类的变量
System.out.println(Car.this.ties);
System.out.println("打火");
}
}


}

原文地址:https://www.cnblogs.com/simly/p/10106505.html