核心java系列——java中继承

x33g5p2x  于2021-03-13 发布在 Java  
字(2.4k)|赞(0)|评价(0)|浏览(218)

继承是面向对象的一个重要特性,子类继承超类的方法和属性,可以使代码通用性强,封装性好。java中继承不支持多继承。下面分析继承的使用:

一、类,超类和子类
继承是子类继承父类的属性和方法,比如在同一公司中,经理和普通职员存在待遇存在差异,比如他们都每月领取自己的薪水,而经理又会领到奖金。
则这可以用继承的概念去构造,子类也能去定义有差异的属性和方法。继承的格式是由关键字extends表示
如 class Employee extends Manager{
//属性和方法
}
通过extends 在已存在的类上派生出一个新类。已存在的类被称为超类,基类或父类,新类被称为派生类,子类。超类并不比子类存在更多的功能
1.子类可扩展超类没有的方法。
2.通用的方法常封装在父类中定义。
3.子类可以增加域,增加方法或覆盖父类的方法,但不能删除继承父类的域和方法。
super关键字:是指向父类的,可以拥有调用父类的属性和方法,如super(name)调用父类具有相同参数的构造器。
下面用如下几个方面继承中的几个概念:
1.继承层次
继承不只局限于一个层次,也可以多层次继承,有一个公共类派生出所有类的集合被称为继承的层次。
java不支持多继承。
2.多态
多态是指一个类可以有多种对象的引用,子类的每个对象也可是超类的对象,比如
Employee e=new Employee();
Employee e=new Manager(); 说明e即可父类Employee的引用,也是子类Manager的引用。
3.动态绑定
动态绑定是一种很重要的特性,可以在无须修改现存代码的基础上对程序进行扩展,比如生成一个新类B,变量e持有类B的引用,则对类中的非final,private,static修饰的方法,变量e都可调用。
4.阻止继承
父类中若有些方法不想被子类去继承,则可用final修饰,被称为不可扩展类。定义形式如下:
final class Manager extends Employee{
}
类中的方法也可被修饰成final类.且此方法无法被继承。如

class Employee{
     public final String getName(){
        return name;
      }

5.抽象类
java中抽象是一个很重要的概念,抽象类和抽象方法的具体实现在其子类中,扩展抽象的方法有如下方式
1.在子类中定义部分抽象方法或不定义抽象方法,则子类必须定义为抽象类。
2.在子类定义全部的抽象方法,则子类不需要定义为抽象类。

public abstract class Person {
    private String name;
    public String getName() {
        return name;
    }
    public Person(String name){
        this.name=name;
    }
    public abstract String getDescription();
}
public class Employee extends Person {

    public Employee(String name,double s,int year,int month,int day) {
        super(name);
        salary=s;
        GregorianCalendar calendar=new GregorianCalendar(year, month-1, day);
        hday=calendar.getTime();
    }
    @Override
    public String getDescription() {
        return String.format(" an employee salry is $%.2f", salary);
    }
    private  double salary;
    private Date hday;
    public double getSalary() {
        return salary;
    }
    public Date getHday() {
        return hday;
    }

}

6.受保护访问
在类中常将属性修饰为private,方法修饰为public 可让子类不能访问超类中的私有属性。然而有时候超类的中的某个属性能被子类访问。
则可将此属性修饰为protected.如Employee的name属性被protected修饰,子类可访问该属性,而不能访问其他属性。
java中常用于控制可见性的4个修饰符:
对本类可见-private
对所有类可见-public
对本包和所有子类可见-protected
对本包可见-默认修饰符

二、Object-所有类的超类
Object类所有java类的祖先,java中每个类都是由它扩展而来。如除基本类型不是对象,字符,布尔类型等都不是对象,所有数组类型,包括基本类型与对象数组都扩展于Object.
Object中几个比较重要的方法,如equals,HashCode()和toString()等方法
1.equals()是检测一个对象是否与另一个对象相同,在Object中,用于判断两个对象的引用是否相同,若引用相同,则认为两个对象是相等的。
2.hashCode()方法是基于散列码,散列码是对象导出的一个整型值,若x,y是两个不同的对象,则x.hashCode()与y.hashCode()基本不会相同。
Equals()与hashCode()的定义必须一致,如x.equals(y)返回true,则x.hashCode()与y.hashCode()就必须有相同的值。

3.toString()返回对象值的字符串

如 public string toString(){   
 return “Employee[name=”+name+”,salary=”+salary+”]”   
 }   
 或   
public string toString(){   
 return getClass().getName()+”[name=”+name+”,salary=”+salary+”]”   
 }

相关文章

微信公众号

最新文章

更多