Java 方法、关键字、重载、覆写

命名要求

命名要求

方法

分为普通方法、构造方法、set/get方法
方法名前加两种类型,有返回值(8大数据类型),无返回值(void)

普通方法

在对象实例化时可以调用多次

public static void fun(){     //static为静态方法,可以不加
}

方法名称和类名称一致

set/get方法

class A1{
    private String name;
    public void setName(String name){
        this.name = name;
    }
    public String(返回类型) getName(){
        return this.name;
    }
}

set方法两种作用,修改内容和设置内容。set方法无返回值,用法public void set属性名(类 属性名){this.属性名 = 属性名},特别注意的是数组也属于java类,在get方法中格式为public 类名称 get属性名(类 属性名){return 属性名},需要注意的是在数组生命中格式为public 类名称[ ] get属性名(类 属性名){return 属性名}。注意[ ]

构造方法

在使用关键字new,实例化新对象时调用,而且此方法只可以调用一次。

class Book{
        public Book(){  //构造方法的方法名必须与类名一样
    }
}

static关键字

一、定义属性(用static定义属性,表示公有共享信息,若有一个修改了属性内容,则其他全部改变)

class Book{
    private String name ;
    private double price;
    static String pub = "beida";
    
    public Book(String name,double price){
        this.name = name;
        this.price = price;
        
    }
    
    public  String getInfo(){
        return "Name:"+this.name+" "+"Price:"+this.price+"Pub:"+this.pub;
    }   
}
public class Exten{
    public static void main(String []args){
        Book ba = new Book("Java",36.1);
        Book bb = new Book("Android",12.4);
        ba.pub = "qinghua";
        System.out.println(ba.getInfo());
        System.out.println(bb.getInfo());
    }
}
-------------------------------------------------
用static定义前后结果
F:\prac>java Exten
Name:Java Price:36.1Pub:qinghua
Name:Android Price:12.4Pub:beida

F:\prac>javac Exten.java

F:\prac>java Exten
Name:Java Price:36.1Pub:qinghua
Name:Android Price:12.4Pub:qinghua

static定义方法

this/super关键字

this/super 可调用方法、属性

| NO | 区别 | this |super|
| :--------: | :----: | :----: | :--------: | :----: | :----: |:
|1 | 区别 | 调用本类构造、本类方法、本类属性 |子类调用父类构造、方法、属性|
| 2 | 形式 | 先查找本类,若无查找父类 |不查找子类,直接调用父类|
|3 | 特殊 |表示本类当前对象 |~||

final

1、final定义的类不能有子类;

final class A{
}
class B extends A{ //错误
}

2、使用final定义的方法不能被子类所覆写;

final class A{
     public final void  fun(){   //注意final和void顺序,不可错
   }
}
class B extends A{ //错误
    public  void  fun(){
   }
}

3、使用final定义的变量就变成了常量,常量在定义的时候必须设置好内容,并不能被修改。
4、全局常量
常量全部大写STEDENTNAME,变量studentName,方法public void setName

public static final String MSG = "ff";

this.方法()/super.方法()

this.方法()会首先查找本类中的方法,若查找到直接调用,若查询不到则查询父类,有则调用,没有则编译报错(找不到此方法)。
super.()方法会直接查询父类,不会查询子类

class A{
    public void fun(){
        print();
    }
    public void print(){
        System.out.println("A");
    }
}
class B extends A{
    public void print(){
        super.print();    //this.print();
        System.out.println("B");
    }
}
public class Exten {
    public static void main(String [] args){
        B b = new B();
        b.fun();
    }
}

方法重载

方法的名称相同,参数的类型和个数不同。

public class Exten {
    public static void main(String args []){
        System.out.println(fun(3,5));
        System.out.println(fun(3,5,9));
        System.out.println(fun(3.1,5.6));
    }
    public static int fun(int x,int y){
        return x+y;
    }
    public static int fun(int x,int y,int z){
        return x+y+z;
    }
    public static double fun(double x,double y){    
    ----public static double fun(int x,int y)---错误,需一致
        return x+y;
    }
}

方法覆写(父类功能不足,而子类还必须使用,就会使用覆写)

1、观察实例化的是那一个类;
2、观察这个实例化的类里面调用的方法是否是已经被覆写过的,如果没覆写过则调用父类的。

//返回值一样,方法名相同,声明类型相同,数据类型相同,才为覆写
class A{
    public void fun(){
        System.out.println("A类中的方法");
    }
}
class B extends A{
    public void fun(){
        System.out.println("B类中的方法");
    }
}
class C extends A{
//Exten.java:12: 错误: C中的fun()无法覆盖A中的fun();
//若改为public String  fun()  ^ 返回类型String与void不兼容
    public void fun(){   
        System.out.println("C类中的方法");
    }
}
public class Exten {
    public static void main(String [] args){
        B b = new B();
        b.fun();
        C c = new C();
        c.fun();
    }
}

3、权限问题(public>默认>private)
子类不可以使用比父类更高的权限,使用后就不是覆写了

//覆写
class A{
    public void fun(){
        print();
    }
    public void print(){
        System.out.println("A");
    }
}
class B extends A{
    public void print(){
        System.out.println("B");
    }
}
public class Exten {
    public static void main(String [] args){
        B b = new B();
        b.fun();
    }
}
------------------------------------------------------
//非覆写
class A{
    public void fun(){
        print();
    }
    private void print(){
        System.out.println("A");
    }
}
class B extends A{
    public void print(){
        System.out.println("B");
    }
}
public class Exten {
    public static void main(String [] args){
        B b = new B();
        b.fun();
    }
}

属性覆写

基础父类

class Array{
    private int [] data;
    //private int len;
    private int foot;
    public Array(int len){
        if(len>0){
            this.data = new int [len];
        }else{
            this.data = new int [1];
        }
    }
    public boolean add(int num){
        if(this.foot<this.data.length){
            this.data[this.foot++] = num;
            return true;
        }
        return false;
    }
    public int [] getData(){
            return this.data;
        }
    }
}
public class Demo{
    public static void main(String args[]){
        Array a = new Array(3);
        System.out.println(a.add(10));
        System.out.println(a.add(20));
        System.out.println(a.add(30));
        System.out.println(a.add(100));
        System.out.println(a.add(100));
        int [] temp = a.getData();
        for(int x=0;x<temp.length;x++){
            System.out.println(temp[x]);
        }
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,155评论 19 139
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,278评论 0 2
  • 一响清风一场欢。 一罢心殇一云间。 一纸朱颜一红砂。 一世欢笑一情缘。 相识自是密无间, 一时若无言,暂罢故人人自...
    白子裳阅读 377评论 0 1