Java从0开始(09)(面向对象编程)

方法的重载(overload)
重载的概念:

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。

重载的特点:

与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型)。调用时,根据方法参数列表的不同来区别。

方法参数的值传递机制
  • 方法,必须由其所在类或对象调用才有意义。若方法含有参数:
    形参:方法声明时的参数
    实参:方法调用时实际传给形参的参数值
  • Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。
  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
    形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
    在这里插入图片描述
  • 上图的输出结果为:
    修改之前x=5
    change:修改之前x=5
    change:修改之后x=3
    修改之后x=5
递归(recursion)方法
  • 递归方法:一个方法体内调用它自身。
  • 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
    递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
面向对象特征之一:封装和隐藏
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
低耦合 :仅对外暴露少量的方法用于使用。
  • 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提 高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露 的暴露出来。这就是封装性的设计思想。
信息的封装和隐藏
  • Java中通过将数据声明为私有的(private),再提供公共的(public) 方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
    隐藏一个类中不需要对外提供的实现细节;
    使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑, 限制对属性的不合理操作;
    便于修改,增强代码的可维护性
四种访问权限修饰符

在这里插入图片描述

  • 对于class的权限修饰只可以用public和default(缺省)。
  • public类可以在任意地方被访问。
  • default类只可以被同一个包内部的类访问。
  • 访问修饰符,定义了类的成员访问的的范围。
类的成员之三: 构造器(或构造方法)
  • 构造器的特征:
    它具有与类相同的名称
    它不声明返回值类型。(与声明为void不同)
    不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值
  • 构造器的作用:
    1、创建对象
    2、给对象进行初始化
构造器分类
  • 根据参数不同,构造器可以分为如下两类:
    隐式无参构造器(系统默认提供)
    显式定义一个或多个构造器(无参、有参)
  • 注 意:
    Java语言中,每个类都至少有一个构造器
    默认构造器的修饰符与所属类的修饰符一致
    一旦显式定义了构造器,则系统不再提供默认构造器
    一个类可以创建多个重载的构造器
    父类的构造器不可被子类继承
构造器重载
  • 构造器一般用来创建对象的同时初始化对象。如
class Person{ 
    String name; 
    int age; 
    public Person(String n , int a){ 
        name=n; age=a;
    } 
}
  • 构造器重载使得对象的创建更加灵活,方便创建各种不同的对象。
public class Person{ 
    public Person(String name, int age, Date d) { this(name,age);} 
    public Person(String name, int age) {} 
    public Person(String name, Date d) {} 
    public Person(){} 
}
  • 构造器重载,参数列表必须不同
public class Person {  
    private String name; 
    private int age; 
    private Date birthDate; 
    public Person(String n, int a, Date d) { 
        name = n; 
        age = a; 
        birthDate = d; 
    } 
    public Person(String n, int a) { 
        name = n; 
        age = a; 
    } 
    public Person(String n, Date d) { 
        name = n; 
        birthDate = d; 
    } 
    public Person(String n) { 
        name = n; 
        age = 30; 
    } 
}
关键字:this的使用
  • this 可以调用类的属性、方法和构造器
  • 它在方法内部使用,即这个方法所属对象的引用;
  • 它在构造器内部使用,表示该构造器正在初始化的对象。
  • this:区分同名的成员变量和局部变量
    this.name = name this.age = age
    还可以调用本类的其他的重载的构造方法
  • this(name)使用this调用其他方法必须位于该构造方法的第一条语句
  • this调用构造方法只能调用一次
  • this不仅可以用于构造方法中,也可以用于setter()和getter()方法中
  • 在普通方法中,调用其他方法时,this可以省略,加上this主要是增强代码的可读性
  • this:当前对象
    当前正在操作本方法的对 象称为当前对象
class Person{ // 定义Person类 
    String name; 
    Person(String name){ 
        this.name = name;
    } 
    public void getInfo(){ 
        System.out.println("Person类 --> " + this.name) ; 
    } 
    public boolean compare(Person p){ 
        return this.name==p.name; 
    } 
}
 public class PersonTest{ 
     public static void main(String args[]){ 
         Person per1 = new Person("张三") ; 
         Person per2 = new Person("李四") ; 
         per1.getInfo() ; // 当前调用getInfo()方法的对象是per1 
         per2.getInfo() ; // 当前调用getInfo()方法的对象是per2 
         boolean b = per1.compare(per2); 
     } 
 }
  • 使用this调用本类的构造器
    this可以作为一个类中 构造器相互调用的特殊 格式
class Person{ // 定义Person类 
    private String name ; 
    private int age ; 
    public Person(){ // 无参构造器 
        System.out.println("新对象实例化") ; 
    } 
    public Person(String name){ 
        this(); // 调用本类中的无参构造器 
        this.name = name ; 
    } 
    public Person(String name,int age){ 
        this(name) ; // 调用有一个参数的构造器 
        this.age = age; 
    } 
    public String getInfo(){ 
        return "姓名:" + name + ",年龄:" + age ; 
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值