再看Java类的继承和多态
继承是Java面向对象的一种表现。利用继承可以创建公共属性的父类,然后根据各个子类的不同特性创建各个不同属性。
注意事项:
子类只继承父类的属性和方法,并根据自身需要设定自己新的属性和方法,经过继承的类是子类,被继承的类是父类,【Java 不支持多继承,即只有一个父类】
举个栗子:
爸爸只有一个,孩子却有很多,孩子只能从一个父亲那里继承家业,但一个父亲可以有多个孩子。
object 类及其方法
Java中所有的类都默认继承object类,换言之,object是Java所有类的父类 该类定义如下:
public class object
Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,具体的类定义结构如下图:
1对象中的克隆
1.克隆的限制
1.1:被克隆的类必须自己实现cloneable的接口,用来指示object.clone()方法可以合法的对该类实例进行按字段复制。 cloneable接口实际上是一个标识性接口,没有任何接口方法。
1.2:实现cloneable接口的类应该使用公共方法重写object.clone 某个对象实现了此接口就clone它是不可能的
1.3:在Java.lang.object类中clone方法是这么定义的【
protected object clone()
throws CloneNotSupportedException
】创建并返回此对象的一个副本
2.克隆层次
1.浅层克隆:主要复制基本对象的值
2.深层克隆:当类存在聚合关系时候,克隆就必须考虑聚合对象的克隆。可以复制引用类型的字段
3.Java的继承
公式如下:
class 子类 extends 父类{}
1.子类共享父类中的非私有属性
2.子类共享父类中的非私有方法
4. super 关键字
1.使用super关键字调用父类属性 语法如下:
super . 父类属性
public class Father {
public String v="Father";
public String x="输出了Father类的public成员变量x!!!";
public Father() {
System.out.println("Father构造方法被调用!");
}
public Father(String v){
this.v="Father类的带参数构造方法!运行了.";
}
public void outinfo(){
System.out.println("Father的outinfo方法被调用");
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
}
package org.test;
public class Son extends Father{
public String v="Son";
public Son() {
super(); //调用超类的构造方法,只能放到第一行.
System.out.println("Son无参数构造方法被调用!");
//super(); //错误的,必须放到构造方法体的最前面.
}
public Son(String str){
super(str);
System.out.println("Son带参数构造方法被调用!");
}
//覆盖了超类成员方法outinfo()
public void outinfo(){
System.out.println("Son的outinfo()方法被调用");
}
public void test(){
String v="哈哈哈哈!"; //局部变量v覆盖了成员变量v和超类变量v
System.out.println("------1-----");
System.out.println(v); //输出局部变量v
System.out.println(this.v); //输出(子类)成员变量v
System.out.println(super.v); //输出超类成员变量v
System.out.println("------2-----");
System.out.println(x); //输出超类成员变量v,子类继承而来
System.out.println(super.x); //输出超类成员变量v
System.out.println("------3-----");
outinfo(); //调用子类的outinfo()方法
this.outinfo(); //调用子类的outinfo()方法
super.outinfo(); //调用父类的outinfo()方法
}
public static void main(String[] args) {
new Son().test();
}
}
2。使用super调用父类构造方法
如果使用super()则是调用父类无参数构造方法,使用super(参数)则是调用父类的有参数构造方法。
3.子类父类构造方法的执行顺序
3.1 子类的构造方法会默认调用父类的无参数构造方法。
3.2如果子类只提供有参数的构造方法,则必须在子类的构造方法中调用调用父类的构造方法
3.3 执行完父类的构造方法后,在调用本类的构造方法。
5.多态变化
Java中多态实现
Java多态的体现具体表现在方法的重载和覆盖上,
方法重载就是有多个方法名相同,类型不同【参数个数,类型上不同】
覆盖就是指子类重写了父类中的方法
注意事项:子类重写父类中的方法,即子类中的方法和父类中的方法保持一致,但是,方法的修饰符一定要大于等于父类中方法的修饰符。
6.static 关键字
6.1 静态变量:普通变量加上static关键字便是静态变量
6.2 静态方法:普通方法加上static关键字便是静态方法
7.final属性
final是最终的意思,使用final修饰一个类,表示这个类是不能被继承的,修饰的方法是不能被重写的,final修饰变量,代表该变量是常量。 并且不能被修改
8 . abstract 关键字
使用abstract 修饰的类是抽象类,抽象类中既有抽象方法,也有具体方法,只有方法头没有方法体。抽象类必须由其子类继承,才能实例化对象
抽象类 比如人类,女朋友,这都是抽象类
抽象类定义: public【访问权限】 abstract class test{}
抽象方法:public abstract double area();
抽象类不仅有抽象方法,还有具体可以实现方法,
public void say(){
System.out.println("我是具体的实现方法");
}