Java的抽象类、抽象方法和嵌套类

目录

前言

抽象类

抽象类实例

抽象类的类成员

抽象方法

嵌套类

嵌套类的定义

内部类

静态嵌套类

最后


前言

抽象类属于Java类的高级特性,是一种特殊的类,用来提供更高级的类型抽象。如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。好,我们下面开始学习抽象类、抽象方法和嵌套类。

抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。在关键字class前面使用关键字abstract来声明抽象类,语法格式为:

abstract class 类名{
     //类体 
}

一个类包含有抽象方法,那么这个类必须被声明为abstract,如下所示:

public abstract class Student{
      //声明字段
      //声明非抽象的方法
      abstract void leaning();     //声明抽象方法       
}

注意:

  • 当一个抽象类派生子类时,子类通常提供父类中所有抽象方法的实现。如果子类中没有实现其父类中所有的抽象方法,那么这个子类也必须被声明为abstract;
  • 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样;
  • 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类;
  • 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法;
  • 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象类实例

首先声明一个抽象类Student,在这个类中,提供被所有子类所全部共享的成员变量和方法,还声明一些抽象方法,这些方法需要被子类实现,但是实现的途径又各自不同。例如:

abstract class Student{      //声明一个抽象类Student
        String name;         //声明被所有的子类所共享的成员变量
        ...
        void study(){
        ...
        }
        abstract void run();
        abstract void eat();
}

每一个Animal类的非抽象子类,如dog类和cat类,必须实现run()和eat()方法,例如:

class dog extends Animal{     //声明dog类,是抽象类Animal的子类
       void run(){            //在子类中实现父类中的声明的抽象方法,提供具体的实现
       ...
       }
       void eat(){
       ...
       }        
}
class cat extends Animal{     //声明cat类,是抽象类Animal的子类
       void run(){            //在子类中实现父类中的声明的抽象方法,提供具体的实现 
       ...
       }
       void eat(){
       ... 
       }
}

虽然dog类和cat类都有自己的run()方法和eat()方法,但它们实现的方法是不同的。这样就在抽象类Animal中提供了统一的对外接口,而在子类中去具体实现。

所有的子类如果要想正常的完成操作,必须按照指定的方法进行覆写才可以,而这个时候抽象类所起的功能就是一个类定义模板的功能。

抽象类的类成员

一个抽象类也可以有静态字段和静态方法。与其他类一样,可以直接使用抽象类名来引用这些静态成员。例如:

abstract class AbstractClass{
    static void say(){                    //定义的类方法(静态方法)
         System.out.println("Hello");
    };
}
public class myfirst {
	public static void main(String[] args) {
		AbstractClass.say();              //可以直接通过抽象类名调用其静态方法
	}
}

注意:修饰符static和abstract不能一起使用。

抽象方法

如果一个方法被声明但是没有被实现,那么该方法被称为“抽象方法”。即只有方法的声明,而没有方法的实现,用关键字abstract进行修饰,语法格式为:

abstract 方法返回值类型 方法名(参数列表);

除关键字abstract,其他声明与普通方法的声明相同。但,一个接口中的所有方法,隐含的都是抽象的,因此接口的方法可以不使用abstract修饰符。

嵌套类

  • 使用嵌套类有很多种原因,包括以下几种:
  • 将只用在同一个地方的类进行逻辑上的分组的一种方法;
  • 增强封装型;
  • 使代码可读性和可维护性更强。

嵌套类的定义

在Java中允许在一个类(classA)中定义另一个类(classB),则classB称为“嵌套类”,classA称为“外部类”。例如:

class A{
    ...
    class B{
    ... 
    }
}

嵌套类可以分为:

  • 声明为static的嵌套类称为“静态嵌套类”;
  • 非静态嵌套类称为“内部类”。

例如:

class outerClass{
      ...
      static class StaticNestedClass{    //静态嵌套类
      ...
      }
      class InnerClass{                  //内部类
      ...
      }
}

内部类

内部类中不能定义任何静态成员。内部类的实例对象存在于外部类的实例对象中。并可以直接访问包围它的实例的方法和字段,包括私有方法和私有字段。

要实例化一个内部类,必须首先实例化其外部类,然后使用以下的语法创建位于外部对象中的内部对象:

OuterClass.InnerClass innerObject=outerObject.new InnerClass();

一个嵌套类可以访问它的封装类的所有私有成员,包括字段和方法。因此,被一个子类所继承的一个public或protected嵌套类可以间接访问父类的所有私有成员。

静态嵌套类

与类方法和类变量一样,静态嵌套类与它的外部类相关联,并且和静态类方法一样,一个静态嵌套类不能直接引用其他外部类的实例变量或实例方法,只能通过一个对象引用使用它们,语法格式如下:

OuterClass.StaticNestedClass

要创建一个静态嵌套类对象,可以使用下面所示的语法:

OuterClass.StaticNestedClass nestedObject=new OuterClass.StaticNestedClass();

最后

好了,Java的抽象类、抽象方法和嵌套类讲到这里了,谢谢观看!!!

我们下篇文章再见!!!

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值