Java面向对象 —— 封装、继承、多态

本文详细介绍了Java面向对象编程中的核心概念:封装、继承和多态。封装强调保护类的内部数据并提供公共接口访问。继承允许类间形成层次结构,实现代码复用和IS-A关系,如IS-A关系可通过extends和implements关键字实现。多态则是对象多种形态的表现,允许子类重写父类方法实现不同行为。文中还探讨了虚方法、重写与重载的区别,以及抽象类和接口的应用,强调接口在实现多继承和定义标准行为方面的重要性。
摘要由CSDN通过智能技术生成

Java面向对象(一)

封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于能修改自己的实现代码,而不用修改那些调用代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

示例:

/* 文件名: EncapTest.java */
public class EncapTest{
   
 
   private String name;
   private String idNum;
   private int age;
 
   public int getAge(){
   
      return age;
   }
 
   public String getName(){
   
      return name;
   }
 
   public String getIdNum(){
   
      return idNum;
   }
 
   public void setAge( int newAge){
   
      age = newAge;
   }
 
   public void setName(String newName){
   
      name = newName;
   }
 
   public void setIdNum( String newId){
   
      idNum = newId;
   }
}

以上实例中public方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为getter和setter方法。

因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

访问:

/* F文件名 : RunEncap.java */
public class RunEncap{
   
 
   public static void main(String args[]){
   
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");
 
      System.out.print("Name : " + encap.getName()+ 
                             " Age : "+ encap.getAge());
    }
}

结果:

Name : James Age : 20

继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。

如果类A是类B的父类,而类B是类C的父类,也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类

继承中最常使用的两个关键字是extends和implements。

这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。

通过使用这两个关键字,能实现一个对象获取另一个对象的属性。

所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。

通过过extends关键字可以申明一个类是继承另外一个类而来的,一般形式如下:

// A.java
public class A {
   
    private int i;
    protected int j;
 
    public void func() {
   
 
    }
}
 
// B.java
public class B extends A {
   
}

以上的代码片段说明,B由A继承而来的,B是A的子类。而A是Object的子类,这里可以不显示地声明。

作为子类,B的实例拥有A所有的成员变量,但对于private的成员变量B却没有访问权限,这保障了A的封装性。

IS-A关系

IS-A就是说:一个对象是另一个对象的一个分类。

下面是使用关键字extends实现继承。

public class Animal{
   
}
 
public class Mammal extends Animal{
   
}
 
public class Reptile extends Animal{
   
}
 
public class Dog extends Mammal{
   
}

基于上面的例子,以下说法是正确的:

  • Animal类是Mammal类的父类。
  • Animal类是Reptile类的父类。
  • Mammal类和Reptile类是Animal类的子类。
  • Dog类既是Mammal类的子类又是Animal类的子类。

分析以上示例中的IS-A关系,如下:

  • Mammal IS-A Animal
  • Reptile IS-A Animal
  • Dog IS-A Mammal

因此 : Dog IS-A Animal

通过使用关键字extends,子类可以继承父类的除private属性外所有的属性。

通过使用instanceof 操作符,能够确定Mammal IS-A Animal

示例:

public class Dog extends Mammal{
   
 
   public static void main(String args[]){
   
 
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();
 
      System
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值