一、类的继承
1、什么是类的继承?
类的继承就是某一个类可以通过extends关键字继承另一个类中的方法和属性。
2、为什么要进行类的继承?
有时我们要定义一个新的类,可能会发现这个类中的属性和方法有很大一部分就是我们在另外一个类中定义的全部属性和方法。这时重新再输入一次未免有些费事费力,而使用继承的话,则可以省去这一步。在编程过程中,继承可以为我们省下很多事。
3、继承的语法格式
public class 子类名 extends 父类名{
}
4、在使用继承中应注意的问题
(1)一个子类只可以有一个父类,即单继承
(2)不是父类中所有属性和普通方法都可被子类使用,此时可分两种情况:一、子类与父类在同一个包中:子类可使用除了用private定义以外的所有普通方法与属性。二、子类与父类不在一个包中:子类只可使用父类中用public定义的属性和普通方法。
5、方法的重写
可以在子类中对父类中的方法进行重写,但是访问修饰符,返回值类型,方法名,参数类型,参数名,参数顺序都必须一样。此时用子类对象优先调用的方法是子类的,若没有重写,优先调用的则是父类中的方法。
方法重写后,若想优先调用父类方法,可用:super.方法名();
6、自动转型
用父类类型变量名来引用子类对象,格式一般为:
父类名 对象名 = new 子类名;
自动转型后,用对象名.方法名(),还是优先调用子类中的方法。但需注意,转型后,不可调用子类中独有的方法。
用如下程序进行说明:
//建立一个父类
public class Cars {
String name;//姓名属性
//定义获得姓名属性值的方法
public String getName(){
return name;
}
//定义设置姓名属性值的方法
public void setName(String name){
this.name = name;
}
}
//建立一个Bike子类,继承Cars类
public class Bike extends Cars {
}
//建立一个MotorBike子类,继承Cars类
public class MotorBike extends Cars {
}
//建立一个Person类作为动作的发起者
public class Person {
String name="我";//定义骑车对象
//定义获得姓名属性值的方法
public String getName(){
return name;
}
//定义设置姓名属性值的方法
public void setName(String name){
this.name = name;
}
//定义骑车方法
public void rideCars(Cars c){
System.out.println(getName()+"骑"+c.getName());
}
}
public class Ride {
//程序的入口函数
public static void main(String[] args) {
// 实例化一个Person类对象
Person p = new Person();
// 实例化一个电动车对象,并自动转型
Cars mb = new MotorBike();
// 设置电动车名字
mb.setName("MotorBike");
// 调用骑车方法
p.rideCars(mb);
// 实例化一个单车对象,并自动转型
Cars b = new Bike();
// 设置单车名字
b.setName("Bike");
// 调用骑车方法
p.rideCars(b);
}
}
在程序的编写过程中,我发现了一个问题:子类不可继承父类的构造函数,但如果父类中有一个或多个构造方法,那么子类中至少要有一个和父类中构造方法有相同参数的构造方法。
二、 接口
当我们定义一个类时,无非是两种目的:或是实例化生成对象,调用类中的属性和方法;或是作为一个父类被继承。在第二种情况下,有时需要子类重写父类中的所有方法,这就需要用到接口了。
可以借助电脑的USB接口来理解接口的概念,USB接口是已设计好固定好的,但是许多功能不同的设备却可以通过同一个USB接口来与电脑建立连接。也就是说实现了同一个接口的类或接口,可以获得属于这个接口的方法。
1、那么在程序怎样定义一个接口呢?
首先要明确的是,定义接口的关键字是interface。
具体格式如下:
public interface 接口名{
//接口中的属性为常量
public static final 数据类型 常量名=值;
//定义接口中方法(抽象方法)
public [abstract] 返回值数据类型 方法名(数据类型 参数类型,……);
}
从以上的格式可以看出,接口中的方法是没有方法体,也就是说接口中没用任何方法的具体实现,因此,不可用接口直接创建对象。需要注意的是,接口中默认的访问修饰符为public。
2、接口的实现
实现接口的关键字为implements
格式:public class 类名 implements 接口,……{
}
一个类可以实现多个接口,在实现接口时必须实现接口中的所有方法。
三、 抽象类
抽象类是介于类和接口之间的定义,在抽象类中可以有已实现的方法,也可以有像接口中一样没有实现的方法。
1、抽象类定义
关键字:abstract class
格式:public abstract class 抽象类名{
访问修饰符 数据类型 属性名;
访问修饰符 类名(数据类型 参数名,……){
//方法体
}
访问修饰符 返回值数据类型 方法名(数据类型 参 数名,……){
//方法名
}
//抽象方法
访问修饰符 返回值数据类型 abstract方法名(数据类型 参 数名,……);
}
由于抽象类中有抽象方法,自然也就不能直接创建对象。
2、抽象类的继承
用extends关键字实现继承。一个类只能继承一个抽象类,且必须实现抽象类中所有抽象方法。
3、抽象类的应用
有时我们只需用到某个接口的某些而不是全部方法,如果直接实现接口的话就要定义许多空方法。此时,若使用抽象类就可以用哪个方法则重写哪个方法了。
分享到:
相关推荐
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...
"Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...
Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...
3. 接口可以被多重实现,抽象类只能被单一继承。 4. 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中。 5. 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...
一个使用了接口,抽象类,继承的JAVA类,模拟了计算机的组装过程
本主题将深入探讨如何使用普通类、接口和抽象类来实现这些继承方式,并应用到“增、删、改、查”(CRUD,Create, Read, Update, Delete)操作中。 首先,单继承是指一个子类只能继承一个父类的特性。这种方式使得...
接口是一种特殊的抽象类,它不能被实例化,不能被直接使用,而是作为其他类的父类来继承。接口只能包含抽象方法,而不能包含非抽象方法。在 Java 中,接口使用 interface 关键字声明。 在上面的练习中,我们使用...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
5. 接口可以有多重继承,而类只能单继承抽象类。 现在,让我们看看抽象类和接口的相同点和区别: 相同点: 1. 都可以被继承,为派生类提供共享的行为和属性。 2. 都不能被实例化,只能作为其他类的基础。 3. 都...
接口和抽象类都可以包含抽象方法,这些方法在实现接口或继承抽象类的具体子类中必须被实现。 尽管在一定程度上接口和抽象类看起来非常相似,甚至在某些场景下可以互换使用,但实际上它们在设计理念上存在显著差异。...
总结来说,类的继承允许我们构建层次结构,抽象类为共享接口提供了模板,而虚方法则允许子类定制和扩展行为。这些概念共同构成了面向对象编程的强大工具箱,使我们能够构建可维护、可扩展的软件系统。
3. 继承关系:抽象类单继承,而接口允许多继承。 4. 绑定关系:抽象类与子类有从属绑定,接口与实现类之间没有这种绑定。 5. 动态绑定:两者都支持运行时多态,即父类引用指向子类对象。 在使用原则方面: 1. 抽象...
3. 方法实现:抽象类中的抽象方法可以有默认实现,而接口中的方法没有默认实现,除非是在Java 8及以上版本中引入的默认方法和静态方法。 4. 访问修饰符:抽象类中的方法可以有不同的访问修饰符,而接口中的所有方法...
在Java中,一个类可以实现多个接口,但只能继承一个抽象类,这就使得接口成为实现多重继承的有效方式。接口强制实现者遵守其所有方法,确保了代码的规范性。比如,你可以定义一个`Runnable`接口,包含`run()`方法,...
通过抽象类`Shape`定义通用接口,然后由具体的形状类(如`Cube`、`Cylinder`和`Sphere`)继承并实现这些接口,实现了代码的复用和模块化,同时也体现了OOP的封装、继承和多态三大特性。在实际的编程项目中,这样的...
接口提供了比抽象类更大的灵活性,因为一个类可以实现多个接口,但只能继承一个抽象类。 例如,我们可以定义一个`IFruit`接口: ```csharp interface IFruit { void Eat(); void Harvest(); } ``` 然后让`Apple...
3. **继承限制**:C#中一个类只能继承一个抽象类,但可以实现多个接口。 4. **访问修饰符**:抽象类中的成员可以有任意的访问级别,而接口中的成员默认是公共的。 5. **默认实现**:自C# 8.0起,接口可以包含带有...