`
小路青青0113
  • 浏览: 23365 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

继承,接口,抽象类

阅读更多

继承 接口 抽象类

 

一、继承     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实现继承,且一个接口可以继承多个接口!
如果一个类要实现一个接口,就要全部实现这个接口和它的父接口中定义的方法。

 

4
8
分享到:
评论
3 楼 wpf5788 2012-07-05  
支持美女!啊哈哈
2 楼 zhumeilian 2012-07-05  
支持美女
1 楼 hellowql 2012-07-05  
支持一下!

相关推荐

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    JAVA 继承基本类、抽象类、接口区别与联系

    ### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...

    Java抽象类和接口和继承之间关系

    "Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...

    接口与抽象类区别

    3. 接口可以被多重实现,抽象类只能被单一继承。 4. 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中。 5. 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...

    一个使用了接口,抽象类,继承的JAVA类

    一个使用了接口,抽象类,继承的JAVA类,模拟了计算机的组装过程

    \\java类、抽象类、接口、继承和对象解析 .doc

    Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...

    详细解析Java中抽象类和接口的区别

    ### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...

    采用普通类,接口,和抽象类实现单继承和多继承增,删,改,查

    本主题将深入探讨如何使用普通类、接口和抽象类来实现这些继承方式,并应用到“增、删、改、查”(CRUD,Create, Read, Update, Delete)操作中。 首先,单继承是指一个子类只能继承一个父类的特性。这种方式使得...

    表面积和体积_抽象类Shape_shape类继承_

    通过抽象类`Shape`定义通用接口,然后由具体的形状类(如`Cube`、`Cylinder`和`Sphere`)继承并实现这些接口,实现了代码的复用和模块化,同时也体现了OOP的封装、继承和多态三大特性。在实际的编程项目中,这样的...

    类的继承、抽象类、虚方法实现

    总结来说,类的继承允许我们构建层次结构,抽象类为共享接口提供了模板,而虚方法则允许子类定制和扩展行为。这些概念共同构成了面向对象编程的强大工具箱,使我们能够构建可维护、可扩展的软件系统。

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    5. 接口可以有多重继承,而类只能单继承抽象类。 现在,让我们看看抽象类和接口的相同点和区别: 相同点: 1. 都可以被继承,为派生类提供共享的行为和属性。 2. 都不能被实例化,只能作为其他类的基础。 3. 都...

    Java 接口和抽象类

    接口是一种特殊的抽象类,它不能被实例化,不能被直接使用,而是作为其他类的父类来继承。接口只能包含抽象方法,而不能包含非抽象方法。在 Java 中,接口使用 interface 关键字声明。 在上面的练习中,我们使用...

    C#抽象类与接口方法

    接口提供了比抽象类更大的灵活性,因为一个类可以实现多个接口,但只能继承一个抽象类。 例如,我们可以定义一个`IFruit`接口: ```csharp interface IFruit { void Eat(); void Harvest(); } ``` 然后让`Apple...

    java利用接口和抽象类改写求圆的面积和梯形的面积.docx

    接口和抽象类都可以包含抽象方法,这些方法在实现接口或继承抽象类的具体子类中必须被实现。 尽管在一定程度上接口和抽象类看起来非常相似,甚至在某些场景下可以互换使用,但实际上它们在设计理念上存在显著差异。...

    接口抽象类

    本文将深入探讨“接口抽象类”的主题,包括它们的概念、用途、区别以及在Java编程语言中的实现。 首先,让我们了解什么是接口。接口在Java中是一种完全抽象的类型,它只包含方法签名(方法名、返回类型和参数列表)...

    C#接口抽象类区别实例

    (3) 接口可以被多重实现,抽象类只能被单一继承 (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中 (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...

    java中接口与抽象类的详细分析与比较

    在Java中,一个类可以实现多个接口,但只能继承一个抽象类,这就使得接口成为实现多重继承的有效方式。接口强制实现者遵守其所有方法,确保了代码的规范性。比如,你可以定义一个`Runnable`接口,包含`run()`方法,...

    Java语言的接口与抽象类

    3. 继承关系:抽象类单继承,而接口允许多继承。 4. 绑定关系:抽象类与子类有从属绑定,接口与实现类之间没有这种绑定。 5. 动态绑定:两者都支持运行时多态,即父类引用指向子类对象。 在使用原则方面: 1. 抽象...

Global site tag (gtag.js) - Google Analytics