一、今日学习
1 继承的基本概念
(1)可以先创建公共属性的父类,然后再根据各子类的不同特性创建其各个不同属性和方法。
(2)继承得到的类为子类,被继承的类为父类,也叫超类。
(3)Java不支持多继承(子类只能有一个父类)。
2 Object类及其方法
(1)Java中的所有类都默认继承Object类,Object是所Java所有类的父类。
(2)定义:public class Object
(3)Object是类层次结构的根类,每个类都使用Object作为超类,所有对象(包括数组)都实现这个类的方法。
(4)Object类的常用方法:
3 对象中的克隆
(1)克隆的限制
-
被克隆的类必须自己实现Cloneable接口,以指示Object.clone()方法可以合法地对类实例进行按字段赋值。
-
实现Cloneable接口的类应该使用公共方法重写Object,clone(它是受保护的)。
-
在Java.lang.Object类中克隆方法的定义:
protected Object clone() throws CloneNotSupportedException
创建并返回此对象的一个副本,表明是一个受保护的方法,同一个包中可见。
(2)浅层克隆和深层克隆
-
渐层克隆:主要复制基本对象的值
-
深层克隆:当类存在聚合关系时,克隆必须考虑聚合对象的克隆,可以复制引用类型的字段。
4 Java中的继承
(1)公式:class 子类 extends 父类{}
(2)作用:使用继承,子类可以拥有父类中的非私有属性,这样可以使多个类中相同的属性提取出来作为父类管理。
-
子类共享父类中的非私有属性
-
子类可以拥有父类中的非私有方法
(3)Java不支持多继承,子类只能继承一个父类,但是一个父类可以被多个子类继承。
5.super关键字
子类可以使用super关键字调用父类的非私有属性和非私有方法,还可以调用父类的非私有构造方法
1 public class Person { 2 public String name; 3 public String sex; 4 public int age; 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name=name; 10 } 11 public String getSex() { 12 return sex; 13 } 14 public void setSex(String sex) { 15 this.sex=sex; 16 } 17 public int getAge() { 18 return age; 19 } 20 public void setAge(int age) { 21 this.age=age; 22 } 23 }
(1)使用super关键字调用父类属性
语法:super.父类属性 (super关键字可以省略)
1 public class Student extends Person{ 2 private String deparement; 3 private String specialty; 4 String name1=super.name; //调用父类属性 5 String name2=name; //调用父类属性 6 }
(2)使用super调用父类方法
语法:super.父类方法 (super关键字可以省略)
1 public class Student extends Person{ 2 private String deparement; 3 private String specialty; 4 public void test1() { 5 super.getAge(); //调用父类方法 6 } 7 public void test2() { 8 getAge(); //调用父类方法 9 } 10 }
(3)使用super调用父类的构造方法
如果使用super(),则调用父类的无参构造方法;如果使用super(参数),则调用父类的有参构造方法
1 public class Person{ 2 public String name; 3 public int age; 4 public Person() { 5 } 6 public Person(String name,int age) { 7 this.name=name; 8 this.age=age; 9 } 10 } 11 public class Student extends Person{ 12 public student() { 13 super("sky",26); //调用父类构造方法 14 } 15 }
(4)子类和父类构造方法的执行顺序
-
子类默认调用父类的无参构造方法,即子类的构造方法中会默认调用super()并且在构造方法的第一行。
-
如果子类只提供有参的构造方法则,必须在子类的构造方法中调用父类的构造方法。
-
执行完父类的构造方法后,再调用本类中的构造方法。
二、遇到问题
(1)不能记清楚Object类的常用方法
(2)不太能理解Java中克隆的实现
三、明日学习
Java中的多态变化