2.2Java引用类型之类(Class)

1.声明

class ClassName 
{
    //类主体
}

2.继承

类仅支持单一继承。

class SubClassName extends SuperClassName 
{
    // 类的主体
}

3.构造器

构造器名称需与类名相同。

构造器没有返回类型。

如果一个类没有构造器,就会为你提供一个无参数构造器,这个构造器将所有的实例字段设置为默认值。

class ClassName 
{
    ClassName() 
    {
        //构造器主体
    }
}

4.创建对象

//创建对象
类名 对象名 = new 类名();

5.访问成员

//调用外部类
外部类.类变量
外部类.类方法()

//调用同一个类可省略类
[类.]类变量
[类.]类方法()

//调用外部类的对象
对象.实例变量
对象.实例方法()

//调用同一个类可省略this
[this.]实例变量
[this.]实例方法()

6.this关键字

场景一:this指向对象本身。

场景二:调用该类的其它构造器。

//场景二示例
class Employee
{
    public Employee(String a, double s)
    {
        //语句;
    }

    public Employee(double s)
    {
        this("Employee #" + nextId, s);
        nextId++;
    }
}

7.访问器方法

访问器方法,由于它们只返回实例字段值,因此又称为字段访问器。

  • 一个private字段
  • 一个public字段getter方法
  • 一个public字段setter方法
class Employee
{   
    private String name;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}

当字段为可变类型的时候,会破坏封装性。

class Employee
{   
    private Date hireday;

    public Date getHireDay()
    {
        return hirdDay;
    }
    ...
}

Date是可变类型的,dharry.hireDay 引用同一个对象,对d调用更改器方法会自动改变Employee对象的私有状态。

Employee harry = ...;
Date d = harry.getHireDay();
double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 *1000;
d.setTime(d.getTime() - (long)tenYearsInMilliSeconds);

解决此错误的方案就是使用克隆(clone)将hireDay克隆到新的内存位置上。

class Employee
{   
    private Date hireday;

    public Date getHireDay()
    {
        return (Date)hirdDay.clone();
    }
    ...
}

8.抽象类

抽象类与普通的类的区别在于,抽象类不可以被实例化。

abstract class 类名 
{
    abstract 返回类型 方法名(参数);
}

抽象类可以包含静态变量、静态方法、实例变量、实例方法、抽象实例方法、构造器。

即使不包含抽象方法,也可以将类声明为抽象类。

扩展抽象类可以有两种选择。一种是在子类中保留抽象类中的部分或所有抽象方法仍未定义,这样就必须将子类也标记为抽象类;另一种做法是定义全部方法,这样一来,子类就不是抽象的了。

抽象类不能被实例化,可以通过非抽象子类来实例化。

9.final修饰符

final修饰符限制此类不可以拥有子类。

10.super关键字

super关键字可以调用父类中的构造器。假设Employee类Manager类的父类。

public Manager(String name, double salary, int year, int month, int day)
{
    super(name, salary, year, month ,day);
    bouns = 0;
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/java/javalang/2484.html

(0)
上一篇 2021年1月2日 02:18
下一篇 2021年1月2日 17:52

相关推荐

发表回复

登录后才能评论