Java 面对象程序设计中的继承与多态

一,包

1. 自定义包

(1)如果在程序中没有声明包,类将被存放在 default 的包中, default 的包名没有名称。(不建议采用 default 包的形式,建议用户创建自定义包 )

(2)创建包的语法如下:

             语法:package <包名>

(声明一个包的语句必须写在类的第一行)

2. 包的导入

(1)如果要使用Java中存在的包,在程序中使用 import 语句导入包。格式如下:

              格式: import < 包名 >.< 类名 > 

(2)如果要导入一个包中的多个类,可以使用“ * ”表示包中的所有类。例如:

              import java.util.*; //导入包中的所有类

              import java.util.ArrayList; //导入java.util 包中的ArrayList类

3. 包的访问权限

(1)public 访问权限成员 (类,属性和方法统称)

         public 成员可以被其他包中的类访问,public 类中的 protected 成员可以被由它派生的在其他包中的子类访问。

(2)缺省访问权限成员

         缺省访问权限成员,只能被同一个包中的类访问,不可以被其他包中的类访问。

二,继承

1. 继承的概念

(1)概念:继承是面对象程序设计的一个重要特征,它通过继承原有类派生出的子类进而构造出跟为复杂的的子类。(子类既有新定义的行为特征,又继承了原有类的行为特征)

(2)java 继承使用 extends 关键字实现,实现继承的类统称为子类,也白称为基类,超类。

         语法格式为:[ 修饰符 ] class 子类名 [ extends 父类名 ]{  //类定义部分  }

注意:在继承的特性时,子类可以继承父类中访问权限为 public ,protected ,default 的成员变量和方法

2. 继承实现的意义:

           通过继承可以提高代码的复用性,减少了编码量。

注意:子类无法继承父类私有成员,而且在实际开发中,不建议让子类继承父类的属性,因为子类继承父类的属性会打破釜类的封装性

三,重载和重写

1. 重载

(1)意义:方法的重载是指一个类中的多个方法可以具有相同的方法名,但这些方法的参数必须不同,在执行时可以根据其参数个数与类型来判断要调用此方法是哪一种操作。

(构造方法也可以实现方法的重载)

(2)特点:同一个类中 方法名相同,参数列表不同。

                    返回值类型不能用于区分方法的重载。

2. 重写

(1)目的:为了实现新的功能

(2)重写规则:方法的重写要遵循“两同两小一大”的规则。

                        “两同”:即方法名相同,形参列表相同;

                        “两下”:指子类方法返回值类型应比父类方法返回值类型范围更小或相等,子类方法声明抛出的异常类型应比父类方法声明抛出的异常类型范围更小或相等;

                         “一大”:指子类方法的访问权限应比父类方法的访问权限更大或相等。

3. 重写的覆盖问题

          子类包含父类同名的方法,该现象被称为方法重写,也被称为方法覆盖。方法的覆盖使子类“隐藏”了父类的方法,如果需要访问被子类覆盖的方法,则可使用 super 关键字指明调用父类被覆盖的实例方法。

四,多态

1. 多态应用

(1)作用:多态是指同一操作作用与不同的对象,可以有不同的解释,以致产生不同的执行结果。

(2)使用方法:可以通过父类的引用指向子类对象,而在运行时,则可以通过父类所指向的子类对象,调用子类中重写父类的方法。

例:

创建父类人物 Fa :

package tyk;
public class Fa {
    protected String name;
    public void at() {
      
 //无操作
    }
    public void run() {
        System.out.println("在奔跑");
    }
}

 

创建子类大人 Da :

package tyk;

public class Da extends Fa {
  
 //重写父类的 at() 方法
    public void at() {
        System.out.println(this.name+"在大步奔跑......");
    }
}

 

创建子类小人 Xiao :

package tyk;
public class Xiao extends Fa {
  
 //重写父类的 at() 方法
    public void at() {
        System.out.println(this.name+"在小步奔跑......");
    }
    public static void main(String[] args) {
        Fa fu = new Da();
        fu.name="大人";
        Fa zi = new Xiao();
        zi.name="小人";
        fu.at();
        zi.at();

    }

}
 

 

程序运行结果如图:

2. instanceof 运算符

(1)作用:instanceof 运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类,它用于判断运算符前面的引用变量是否是运算符后面的类型或其子类的实例。

(如果条件成立则返回 true ,否则返回 false

(2)instanceof (type)是 Java 提供的两个相关的运算符,通常先使用 instanceof 判断一个对象是否可以强制类型转换,然后在使用(type)运算符进行强制类型转换,从而保证程序不会出现错误。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值