继承 接口 抽象类
一、继承 extends
当你写一个类时,虽然这个类满足了某些功能但是你又想拓展它的功能,此时你就可以使用继承机制再写一个该类的子类,来完成你需要的功能。继承提高了代码的效率,避免了代码重写。
子类继承父类的属性和方法,而父类的私有属性不能直接访问,而是通过setter或getter方法调用访问。
class Person{
private String name; //私有属性
private ine age; //私有属性
public String getName(){
return name; //取得name
}
public void setName(String name){
this.name = name; //设置name
}
public int getAge(){
return age; //取得age
}
public void setAge(int age){
this.age = age; //设置age
}
}
class Student extends Person{
public void fun(){
// System.out.println("父类中的name属性:"+name);
// System.out.println("父类中的age属性:"+age);
//以上方法错误,无法访问
}
}
class Student extends Person{
public void fun(){
System.out.println("父类中的name属性:"+getName());
System.out.println("父类中的age属性:"+getAge());
//因为父类中的name,age属性是私有的,所以在继承的子类中
//不能直接使用,只能通过getter,setter方法调用
}
}
继承特点:
1、java中类的继承只允许单继承而不许多重继承,但可以通过接口实现多重继承。
2、允许多层继承,B继承了A,C继承了B,则A与C同样存在继承关系。
方法重写
保持方法的定义不变,但方法体内部实现不同。
注意!子类中覆写的方法不能拥有比父类方法更加严格的访问权限。方法默认的访问权限是default,访问权限具体如下:
|
同一个类 |
同一个包 |
不同包的子类 |
不同包的非子类 |
private |
Y |
|
|
|
default |
Y |
Y |
|
|
protected |
Y |
Y |
Y |
|
public |
Y |
Y |
Y |
Y |
思考将父类中的一个方法定义成private,子类覆写时声明为default即默认,这还叫做覆写吗?
class Person{
private void print(){ //private访问权限
System.out.println("Person-->void print(){}");
}
public void fun(){
this.print(); //调用print方法
}
}
classStudent extends Person{
void print(){ //扩大权限
System.out.println("Student-->void print(){}");
}
}
public class Test{
public static void main(String[] args){
new Student().fun();
}
}
运行结果是:
Person-->void print(){}
发现调用的是父类方法,说明子类没有覆写父类中的print方法,而是重新定义了新的方法。
二、抽象类 abstract
java中有一类专门作为父类的抽象类,它的作用类似于模板,一个子类也只能继承一个抽象类。抽象类也不能直接创建对象。抽象类介于类和接口之间,可以有实现的也可以有未实现的方法。
规则:包含一个抽象方法的类是抽象类,抽象类和抽象方法用abstract声明,
抽象方法不需要实现,子类(如果不是抽象类)必须重写父类的全部抽象方法。
抽象类中可以定义属性,普通方法,抽象方法,构造方法。其实抽象类除了有特殊的抽象方法、不能实例化对象外,与普通类是相同的,都可以定义普通类中的属性和方法。
abstract class A{
public A(){
System.out.print("A,抽象类中的构造方法");
}
}
class B extends A{
public B(){
System.out.print("B,子类中的构造方法");
}
}
public class Test{
public static void main(String[] args){
B b = new B();
}
}
其中的B类等同于:
class B extends A{
public B(){
super();
System.out.println("B,子类中的构造方法");
}
}
运行结果是:
A,抽象类中的构造方法
B,子类中的构造方法
三、接口 interface定义, implements实现
接口是由全局常量和抽象方法组成的。
方法前无论是否写了public限定符,都是public型的。
interface A{
public static final String name = "张三";
//定义全局常量,同 String name = "张三";
public abstract viod study();
//定义抽象方法,同 void print();
public abstract String getInfo();
//定义抽象方法,同 String getInfo();
}
由于接口中没有任何方法的具体事项,所以不能用接口创建对象。
接口的实现用implements,一个类可以实现多个接口。
类可以通过extends继承类,类可以通过implements实现接口,接口与接口之间也可以通过extends实现继承,且一个接口可以继承多个接口!
如果一个类要实现一个接口,就要全部实现这个接口和它的父接口中定义的方法。
分享到:
相关推荐
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编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...
3. 接口可以被多重实现,抽象类只能被单一继承。 4. 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中。 5. 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...
一个使用了接口,抽象类,继承的JAVA类,模拟了计算机的组装过程
Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
本主题将深入探讨如何使用普通类、接口和抽象类来实现这些继承方式,并应用到“增、删、改、查”(CRUD,Create, Read, Update, Delete)操作中。 首先,单继承是指一个子类只能继承一个父类的特性。这种方式使得...
通过抽象类`Shape`定义通用接口,然后由具体的形状类(如`Cube`、`Cylinder`和`Sphere`)继承并实现这些接口,实现了代码的复用和模块化,同时也体现了OOP的封装、继承和多态三大特性。在实际的编程项目中,这样的...
总结来说,类的继承允许我们构建层次结构,抽象类为共享接口提供了模板,而虚方法则允许子类定制和扩展行为。这些概念共同构成了面向对象编程的强大工具箱,使我们能够构建可维护、可扩展的软件系统。
5. 接口可以有多重继承,而类只能单继承抽象类。 现在,让我们看看抽象类和接口的相同点和区别: 相同点: 1. 都可以被继承,为派生类提供共享的行为和属性。 2. 都不能被实例化,只能作为其他类的基础。 3. 都...
接口是一种特殊的抽象类,它不能被实例化,不能被直接使用,而是作为其他类的父类来继承。接口只能包含抽象方法,而不能包含非抽象方法。在 Java 中,接口使用 interface 关键字声明。 在上面的练习中,我们使用...
接口提供了比抽象类更大的灵活性,因为一个类可以实现多个接口,但只能继承一个抽象类。 例如,我们可以定义一个`IFruit`接口: ```csharp interface IFruit { void Eat(); void Harvest(); } ``` 然后让`Apple...
接口和抽象类都可以包含抽象方法,这些方法在实现接口或继承抽象类的具体子类中必须被实现。 尽管在一定程度上接口和抽象类看起来非常相似,甚至在某些场景下可以互换使用,但实际上它们在设计理念上存在显著差异。...
本文将深入探讨“接口抽象类”的主题,包括它们的概念、用途、区别以及在Java编程语言中的实现。 首先,让我们了解什么是接口。接口在Java中是一种完全抽象的类型,它只包含方法签名(方法名、返回类型和参数列表)...
(3) 接口可以被多重实现,抽象类只能被单一继承 (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中 (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...
在Java中,一个类可以实现多个接口,但只能继承一个抽象类,这就使得接口成为实现多重继承的有效方式。接口强制实现者遵守其所有方法,确保了代码的规范性。比如,你可以定义一个`Runnable`接口,包含`run()`方法,...
3. 继承关系:抽象类单继承,而接口允许多继承。 4. 绑定关系:抽象类与子类有从属绑定,接口与实现类之间没有这种绑定。 5. 动态绑定:两者都支持运行时多态,即父类引用指向子类对象。 在使用原则方面: 1. 抽象...