Java多态

再看Java类的继承和多态

2016-09-12  本文已影响203人  起个什么呢称呢

继承是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("我是具体的实现方法");

}

上一篇下一篇

猜你喜欢

热点阅读