java面向对象的三大特性——继承

ul,ol { margin: 0; list-style: none; padding: 0 }
a { text-decoration: none; color: inherit }
* { margin: 0; padding: 0 }
body { }
.on { margin: 10px 0; cursor: pointer; color: white; font: 20px/34px ""; text-indent: 2rem }
.on2 { background-color: deeppink; font: bold 24px/50px "" }
.on3 { font: bold 20px/40px ""; background-color: rgb(44, 219, 135) }
p { text-indent: 2rem; font: 20px/34px "" }
ul li { text-indent: 2rem; font: 20px/34px "" }
span { color: rgb(44, 219, 135) }

继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。

class Son extends Super{    ...     }

继承父类的子类可以进行以下操作:

  • 1、子类可以不受到限制调用父类非private的属性和方法
  • 2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展
  • 3、子类可以用自己的方式实现父类的方法(父类方法的重写)

继承中需要理解的三个点:构造器、protected关键字、向上转型。

注意点:

当子类的属性与父类的属性名(非private 和 default 修饰的要是同包下)相同时,子类中要调用父类的该属性时,可以使用  super.‘属性名‘。

当子类将父类的方法重写了,而在子类中需要调用父类的该被重写的方法时,可以使用 super.‘方法‘。

class SuperClass{
    private int age;
    public String name="aa";
    public void show(){
        System.out.println("SuperClass");
    }
}
class SonClass extends SuperClass{

    private String name="SonClass ";
    public void show(){
        super.show();
        System.out.println("SonClass " + name + super.name);
    }
} 

构造器

子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。

1、如果父类不主动创建构造函数或者父类有无参的构造函数则子类可以不考虑父类的构造函数。

2、如果子类需要继承父类的含参构造函数则需要使用super命令(如果父类包含多个含参构造函数则依据参数使用super命令)

3、如果父类建立了构造函数且都含有参数,则子类必须使用super命令。

protected

对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。

  • public (对任何人都是可用的)
  • protect (继承的类可以访问以及和private一样的权限)
  • default (包访问权限,即在整个包内均可被访问)
  • private (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

向上转型

向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口

向下转型:父类引用的对象转换为子类类型称为向下转型。

转型需要注意的问题:

向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误。

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。实例如下:

class AA{
    private int age;
    public void show(){
        System.out.println("AA");
    }
}
class BB extends AA{
    private String name;
    public void show(){
        System.out.println("BB");
    }
    public void print(){
        System.out.println("BBBBBBBBBB");
    }
}

public class ExtendsDemo {
    public static void main(String[] args) {
        BB b = new BB();
        //向上转型
        AA ab = (AA)b;
        //不可以调用BB的独有的方法
        ab.show();
        AA a = new AA();
        //向下转型
        //BB ba = (BB)a;//直接报错ClassCastException
        if(a instanceof BB){
            BB ba = (BB)a;
            System.out.println("向下");
        }
    }
}

子类与父类之间的转型总结:

1、父类引用可以指向子类对象,子类引用不能指向父类对象。

2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。

   如Father father = new Son();

3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。

   如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father;

其中father前面的(Son)必须添加,进行强制转换。

4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效

5、向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。

慎用继承

继承存在如下缺陷:

1、父类变,子类就必须变。

2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。

3、继承是一种强耦合关系。

  问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。

原文地址:https://www.cnblogs.com/SacredOdysseyHD/p/8352798.html

时间: 2024-10-25 13:57:25

java面向对象的三大特性——继承的相关文章

java基础篇(二) ----- java面向对象的三大特性之继承

java面向对象的三大特性之继承: 复用代码是java众多引人注目的功能之一,但是想要成为极具革命性的语言,仅仅是复制代码并对其加以改变是不够的.它必须能够做更多的事.引自<Think in java>    而代码复用也是程序员一直不断追求的.由此来说下代码复用的一种方式 java面向对象的三大特性--继承!! 在面向对象程序设计中,继承机制可以有效地组织类的结构.确定类之间的关系,在已有类的基础上开发新的类.继承机制在程序代码复用.提高软件开发效率.降低软件系统维护成本等方面具有重要作用.

java面向对象的三大特性

1.面向对象的三大特性 继承.封装.多态 什么是继承? ①继承是面向对象程序设计能够提高软件开发效率的重要原因之一. ②继承是具有传递性的,就像现实中孙子不仅长得像爸爸而且还像他爷爷. ③继承来的属性和方法是隐式的,也就是在本类里面是看不见的. ④一个类只能有一个父类,也就是类只能是单继承. ⑤一个接口可以有多个父类,也就是接口可以是多继承. 实际项目开发中,一个类继承于另一个类,那么前者就是后者的子类,反则反之. 什么是封装? 对象数据和操作该对象的指令都是对象自身的一部分,能够实现尽可能对外

java基础篇(一) ----- java面向对象的三大特性之封装

java面向对象的三大特性之封装:   封装(Encapsulation)是面向对象的一个重要特征,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节. 通俗的讲所谓封装就是将属性和方法捆绑到一起,封装到一个对象中去, 形成一个不可分割的独立单位,以及尽可能隐藏对象的内部结构,也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了. 如果形容一个人(假设把人看做一个类),我们可以用姓名.年龄,性别等来描述,如果不封

java基础篇(三) ----- java面向对象的三大特性之多态

封装(encapsulation) 类使得数据和对数据的操作捆绑在一起,从而对使用该类的其他人来说,可以不管它的实现方法,而只管用它的功能,从而实现所谓的信息隐藏: 继承(inheritance) 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类.这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用.比如可以先定义一个类叫animal,animal具有以下属性:   眼睛,鼻子,耳朵 而又由ani

JAVA面向对象编程三大特性------封装、继承、多态

一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以

java -- 面向对象的三大特性(封装,继承,多态)

一.封装 1.什么是封装? 把抽象的数据和对数据的操作封装在一起,隐藏变量的实现细节.数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行访问. 2.封装的步骤?  1.使用private 修饰需要封装的成员变量. 2.提供一个公开的方法设置或者访问私有的属性.通过(get/set)方法获取 3.封装的好处与作用? 封装的作用:1. 框架  2. 工具类 封装的好处:  1. 提高了数据的安全性   2. 操作简单   3. 隐藏了方法的实现. 二.继承 1.继承的格式

C#-面向对象的三大特性——继承

继承 注意事项: 继承语法:   类名:父类名 父类也称之为 基类 ,子类也可以成为 xxx的派生类 或 超类. 父类可以有无限个子类,子类只能有一个父类(亲爹),可以有无限个接口(干爹) 子类并不是可以继承父类中所有的东西,而是可以继承父类中允许子类继承的内容,这个允许条件是依靠 访问修饰符 来做的权限 继承主要实现重用代码,节省开发时间. C#中的继承符合下列规则: 继承是可传递的.如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员.Object类作为所

java面向对象的三大特性——封装

封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖

java 面向对象的三大特性

一封装: 1类:封装的是对象的属性和行为 2方法:封装的是一段具体的业务逻辑实现 3访问控制符:封装的是具体的访问权限 2继承: 1作用:代码的复用 2超类拥有所有派生类所共有的属性和行为,接口拥有部分派生类所共有的行为,派生类拥有派生类特有的属性和行为 3具有传递性,单一继承,多个接口实现 3多态: 1行为多态(抽象方法都是多态) ? 2对象多态(所有对象都是多态) 3向上造型,强制类型转换,instanceof 4多态表现形式:重写:根据对象不同来表现多态.重载:根据参数的不同来表现多态 原