多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
继承是面向对象的一个重要特性,子类继承超类的方法和属性,可以使代码通用性强,封装性好。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+”]” } ~~~