面向对象(上)Java方法,this,static 简要总结

  • 1 什么是方法重载 ?

    1、必须具有不同的参数列表

    2、可以有不同的返回类型,只要参数列表不同就可以;

    3、可以有不同的访问修饰符;

    4、可以抛出不同的异常;

    5、方法能够在一个类中或者在一个子类中被重载。

     

     

    那么定义了多个名字相同的方法,我们怎么来区分不同的方法呢,这时候就需要用到参数,我们可以在参数后面的括号中加入不同数量的参数,以这个来对方法进行区分。如下:

     

    public void show();   //无参方法
    public void show(String name);   //重载show方法,一个字符串参数
    public void show(String name, int age);   //重载show方法,两个参数
    public void show(int age, String name);   //重载show方法,两个参数顺序不同

     

    一下举例说明重载的作用

     

    public class Test01 {
    
       public static void main(String[] args) {
    
    int x=1,y=2,z=3;
    
      System.out.println(yunsuan(x));
    
      System.out.println(yunsuan(x,y));
    
      System.out.println(yunsuan(x,y,z));
    
    }
    

       public static  int  yunsuan(int x){

      return x*2;

       }

       public  static  int  yunsuan(int x,int y){

      return x*y;

       }

       public   static int yunsuan(int x,int y,int z){

    return x*y*z;

       }

    }


       

     

    如果我们不运用方法重载的话我们必须定义三方法即  yunsuan1,yunsuan2,yunsuan3 ,这样会使代码变得繁重,如果使用了方法重载我们无需定义多个方法,只需定义一个方法,当输入不同的参数时,系统自动调用所需方法、

    2 什么是方法重写

     

     

    如何定义重写:在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越

    性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。

     

    所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型

     

    一下例子说明方法重写

     

    class Test01 {
    
    public void print(){
    
    System.out.println("父类的方法被调用");
    
    }
    
    }
    class Test02  extends Test01{

      public void print(){

      System.out.println("子类的方法被调用");

      }

    }

     

    public class Test {

    public static void main(String[] args) {

    Test02 x=new Test02();

    x.print();

    }

    }

    输出结果为 


    原方法是输出 父类的方法被调用

    在这里输出却是子类 ,说明该方法以及改变了 ,得到了重写

     

    小练习

    1 编写程序 ,要求实现1+3+5+7+9的值

    public  class Test01 {

      public static void main(String[] args) {

    int sum=0;

    for (int i = 0; i < 100; i++) {

    if (i%2==1) {

    sum+=i;

    }

    }

    System.out.println(sum);

    }

    }

     

    方法有构造方法和普通方法

    构造方法

    特点:

    • 在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下:
    • 方法名和类名相同
    • 方法名的前面没有返回值类型的声明
    • 方法中不能使用return语句返回一个值

    作用:

    给对象初始化

     

    如果定义了一个有参构造方法系统会默认一定义一个无参翻入构造方法  ????

     

    错误

    当一个类中没有定义构造函数时,系统会默认添加一个无参的构造方法。

    当在类中自定义构造方法之后,默认的无参构造方法消失(如果需要无参构造方法需手动添加)。

    如果想使用无参的构造方法,必须自己添加(所以每次最好定义构造方法的时候,自己构造无参的)

     

    this关键字

     

    通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题

    在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次

     

    • 静态变量
    • 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量
    • 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问

    static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错

     

    • 3.6.2 静态方法
    • static关键字修饰的方法称为静态方法
    • 同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。
    • 在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象

     

    • 3.6.3 静态代码块
    • Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块
    • 当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次
    • 在程序中,通常使用静态代码块来对类的成员变量进行初始化

     

    设计一个面向对象的Student类 

    1、请按照以下要求设计一个学生类Student,并进行测试。

    要求如下:

    1)Student类中包含姓名、成绩两个属性

    2)分别给这两个属性定义两个方法,一个方法用于设置值,另一个方法用于获取值.

    3)Student类中定义一个无参的构造方法和一个接收两个参数的构造方法,两个参数分别为姓名和成绩属性赋值

    4)在测试类中创建两个Student对象,一个使用无参的构造方法,然后调用方法给姓名和成绩赋值,一个使用有参的构造方法,在构造方法中给姓名和成绩赋值


    分别建立两个类 

    Student类  和TestMain类 

     

    Student .java
    
    public class Student {
    
           String name;
    
           int score;//  1 
    

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getScore() {

    return score;

    }

    public void setScore(int score) {

    this.score = score;

    }// 2

    public Student() {

    super();

    }

    public Student(String name, int score) {

    super();

    this.name = name;

    this.score = score;

    }

    @Override

    public String toString() {

    return "Student [name=" + name + ", score=" + score + "]";

    }

    //3    

    }


     

     

     

     

    TestMain.java
    
     
    
    class TestMain {
    
     
    
    public static void main(String[] args) {
    
    Student  s1=new Student();
    
    s1.setName("lisi");
    
    s1.setScore(98);
    

    Student s2=new  Student("zhangsan",89);

    System.out.println(s1.getName());

    System.out.println(s1.getScore());

    System.out.println(s2);

    }

     

    }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值