继承剖析

若是要直接调用父类的构造方法,不调用子类的方法则需要使用的是super()关键字

Publicclass Child extends Parent

{

         Public Child()

         {

                   Super(1);//此方法是显示的调用父类的方法,不会再采用默认的方法机制

                   System.out.println(“child!”);

}

 

Public static void main(String[] args)

{

         Child child = new Child();

}

}

 

ClassParent

{

         Public Parent(int i)

         {

                   System.out.println(“Parent!”);

}

}

 

当生成子类的时候,Java默认先调用父类的不带参数的构造方法,然后再执行子类的构造方法,生成子类对象

 

3super关键字:super表示对父类对象的引用

如果子类使用的是super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会去寻找父类的不带参数的构造方法,与this一样,sueper

也必须作为构造方法的第一条执行语句,前面不能有其他可执行语句

 

例子程序;

Publicclass InhertanceTest

{

         Public static void main(String[] args)

         {

                   Apple apple = new Apple();

                   System.out.println(apple.name);

}

}

ClassFruit

{

         String name=”fruit”;

}

ClassApple extends Fruit

{

         String name=”apple”;

}

关于继承的三点:

 

(a)   父类有的,子类也有

(b)   父类没有的,子类也可以增加

(c)    父类有的,子类可以改变他

关于继承的注意事项

(a)   构造方法不能被继承

(b)   方法和属性可以被继承

(c)    子类的构造方法隐式调用父类的不带参数的构造方法

(d)   当父类没有不带参数的构造方法的时候,子类需要使用super()来显式的调用父类的构造方法 ,super指的是对父类的引用

(e)   Super关键字必须是构造方法的第一行语句

 

 

继承举例:

 

public class InheritanceTest

{

         Public static void  main(String[] args)

         {

                   Dog dog = new Dog();

                   Dog.run();

}

}

 

ClassAnimal

{

         Public void run()

         {

                   System.out.println(“animal is running!”);

}

}

ClassDog extends Animal

{

         Public void run()

         {

                   System.out.println(“dog is running!”);

}

 

/*我采用这种方式来写代码看看执行的结果是什么*/

Public void run(int I )

{

         System.out.println(“dogis running!”)

}

}

 

6方法重写(Override):子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类构成了重写关系

方法的重写和方法重载的关系:重载发生在一个类内部的两个或者多个方法,重写发生在父类和子类之间。【重写一定伴随着继承发生的】

8super关键字:super表示对父类对象的引用

9如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法 与this一样 super也要作为构造方法里的第一句所执行的代码

 

继承肯定生成了多个对象,比如儿子继承父亲,那一定生成2个对象

10

当两个方法构成重写关系的时候,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一句语句,因此此时父类的对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑顺序所决定的

11 在定义一个类的时候,若是没有显式的调用某个父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接的父类)

Publicclass InheritenceTest3

{

         Public static void main(String[] args)

         {

                   Son son=new Son();

}

}

ClassGrandpa

{

         Public Grandpa()

{

     System.out.println(“gandpa”);

}

}

 

ClassFather extends Grandpa

{

         Public Father()

         {

                   System.out.println(“father”);

}

}

 

ClassSon extends Father

{

         Father()

         {

                   System.out.println(“Son”);

}

}///继承了3次 所以应该会生成3个对象  依次从上往下进行构造

 

12 多态(Polymorphsim)

 

Publicclass PolyTest

{

         Public static void main(String[] args)

         {

         //     Rose rose = new Rose();

 

Flower rose =new Rose();//多态的应用   父类型的引用可以指向子类的对象---》多态

                   Rose.sing();

}

}

 

ClassFlower

{

         Public Flower()

         {

                  

}

Public void sing()

{

         System.out.println(“floweris singing !”);

}

}

 

ClassRose extends Flower

{

         Public Rose()

         {

 

}

}

 

JavaSE  多态

1      多态;

2        public class PolyTest

3        {

   Public static void main(String[] args)

{

      Parent parent = newParent();

      Parent.sing();

                   Child child = new Child();

                   Child.sing();

                   Parent p = new Parent();  //父类引用指向子类对象

                   p.sing();//指向谁就会调用谁的方法

                  

}   

4        }

 

5        Class Parent

 

6        {

 

7         Public void sing()

 

{       

         System.out.println(“parent is singing!”);

}

 

8        }

 

ClassChild extends Parent

{

         Public void sing()

         {

                   System.out.println(“child issinging!”);        

}       

}

对象转型

Publicclass PolyTest2

{

         Public static void main(String[] args)

         {

                   Animal a = new Dog();

                   Dog  dog = Dog(a);//父类型的引用强制转化成了子类型的引用,因为a实际指向的是dog类型的对象所以可以将a强制转化成Dog类型

                   dog.sing();

}

}

ClassAnimal

{

         Public void sing()

         {

                   System.out.println(“animalis singing!”);

}

        

}

ClassDog extends Animal

{

         Public void sing()

         {

                   System.out.println(“Dog is singing!”);

 

}

}

ClassCat extends Animal

{

        

}

多态是一种运行期的行为,而不是编译期的行为

 

一共有2种类型的强制转化:

向上类型的强制转化 (upcast) 比如:Cat类型转化成Animal类型【将子类型转化成父类型】Cat转化成Animal类型,不需要显式的指定

 

//向上类型转化

Catcat = new Cat();

Animalanimal = (Animal)cat;

Animal.sing();//子类就是父类  cat is singing

向下类型转换(downcast) 比如:将Animal类型转化成Cat类型,即将父类型转化成子类型,对于向下类型转化,必须要显式指定(必须要使用强制类型转换)

//向下类型转换

Animal a = new Cat();

Cat cat = (Cat)a;

Cat.sing();

 

向下类型转换使用的条件:当父类和子类所拥有的方法个数不同的时候,要使用子类所特有的方法,则用强制类型转换。

 

Publicclass PolyTest3

{

         Public static void main(String[] args)

         {

                   Fruit f = new Fruit();

                   f.run();

                   Pear p = new Pear();

                   p.run();

                   System.out.println(“----------------------------------”);

//下面的用法是错误的不使用强制类型转化的时候会出现找不到该方法

                   Fruit f = new Pear();

                   f.grow();

///下面使用强制类型转化的方法来写程序就是对的

                 Fruitf = new Fruit();

                   Pear p = (Pear)f;

                   p.grow();

}

}

 

ClassFruit

{

         Public void run()

         {

                   System.out.println(“fruit isrunning!”);

}

}

ClassPear extends Fruit

{

         Public void run()

         {

                   System.out.println(“pear isrunning!”);

}

 

Public void grow()

{

         System.out.println(“fruitis running!”);

}

}

 

体会多态是运行期的行为例子程序:

Public class PolyTest4

{

       Public staticvoid  main(String[] args)

       {

              Publicstatic void main(String[] args)

              {

                     Aa = null;

                     ///通过命令行来传参数,接收用户的参数

                     If(args[0].equals(“1”))

{

       a = new B();

}

Else if(args[0].equals(“2”))

{

       a = new C();

}else if(args[0].equals(“3”))

{

       A = new D();

}

a.method();

}

}

}

Class A

{

       Public voidmethod()

       {

              System.out.println(“A”);

}

}

class B extends A

{

       Public voidmethod()

       {

              System.out.println(“B”);

}

}

Class C extends B

{

       Public voidmethod()

       {

              System.out.println(“C”);

}

}

Class D extends A

{

       Publicvoid mthod()

{

       System.out.println(“D”);

}

}

 

Publicclass PolyTest5

{

/*原先的写法:*/

/*Publicvoid run(BMW bmw)

{

    Bmw.run();

}

 

  Public voidrun(QQ qq)

{

        qq.run();

}

*/

///一个方法可以搞定所有的方法多态特性

//声明一个父类型的对象作为参数然后根据实际情况new对象

       Public void run(Car car)

       {

                     Car.run();

}

 

       Public static void main(String[] args)

       {

              //先前写法的调用方式

              /*   PolyTest5test = new PolyTest5();

                 BMW bmw = new BMW();

                     Test.run(bmw);

     

                    

              QQ qq = new QQ();

                            Test.run(qq);

*/

 

              //改进过后的调用方式

              PolyTest5  test = new PolyTest5();

              Carcar = new Car();

              Test.run(car);

              QQqq = new QQ();

              Test.run(qq);

}

}

ClassCar

{

       Public void run()

       {

              System.out.println(“car isrunning!”);

    ​    ​}

}

 

}

ClassBMW

{

       Public void run()

​    ​{

    ​    ​System.out.println(“BMWis running”);

    ​}

 

}

 

ClassQQ extends Car

{

       Public void run()

       {

              Public void run()

              {

                     System.out.println(“QQ isrunning”);

    ​    ​    ​    ​}

    ​    ​}

}

 

 

 

 

Java基础(二)继承剖析的更多相关文章

  1. Java基础-hashMap原理剖析

    Java基础-hashMap原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.什么是哈希(Hash) 答:Hash就是散列,即把对象打散.举个例子,有100000条数 ...

  2. Java面试题总结之Java基础(二)

    Java面试题总结之Java基础(二) 1.写clone()方法时,通常都有一行代码,是什么? 答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有G ...

  3. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  4. Java入土--Java基础(二)

    Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...

  5. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  6. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  7. java基础之继承(一)

    虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...

  8. java基础二(阅读Head First Java记录)

    写在前面的话 本部分是在语法基础上的一些内容,比如内部java函数库,继承多态等   “与”和“或”运算符 1.短运算符(&&,||)    &&与,必须表达式两边都为 ...

  9. [ 转载 ] Java基础二

    前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...

  10. Java基础(二) 基本类型数据类型、包装类及自动拆装箱

    我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...

随机推荐

  1. cs61a回顾

    从1月25开始到2.20,完成第一个项目hog. 总结让自己进度慢的主观因素: 妄图一次阅读掌握所有知识:违反了<为什么学生不喜欢上学>中大脑不是用来思考的,它的真正作用在于使你避免思考的 ...

  2. WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪

    我的 VisualStudio 在更新到 2022 就构建不通过 WPF 仓库,提示我在 Grid 的代码里面找不到 ColumnDefinitionCollection 和 RowDefinitio ...

  3. 10.prometheus监控--监控进程process

    一.进程监控 如果想要对主机的进程进行监控,例如chronyd,sshd等服务进程以及自定义脚本程序运行状态监控.我们使用node exporter就不能实现需求了,此时就需要使用process ex ...

  4. 【Android】Binder的Oneway拦截

    在某些虚拟化,免安装,打点,环境检测,拦截器等场景,针对Android系统服务接口的拦截是常用的技术方案.通常只是针对正向的接口调用,如果涉及被动的服务回调拦截,则实现起来就有些许麻烦. 说明 由于我 ...

  5. 深入 Django 模型层:数据库设计与 ORM 实践指南

    title: 深入 Django 模型层:数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: ...

  6. 【python爬虫案例】用python爬豆瓣电影TOP250排行榜!

    目录 一.爬虫对象-豆瓣电影TOP250 二.python爬虫代码讲解 三.同步视频 四.获取完整源码 一.爬虫对象-豆瓣电影TOP250 前几天,我分享了一个python爬虫案例,爬取豆瓣读书TOP ...

  7. sqli-labs-master 导入导出 + 第七关

    1.load_file()导出文件 load_file(file_name):读取文件并返回该文件内容作为一个字符串. 使用条件: A:必须有权限读取并且文件完全可读 B:预读取文件必修在服务器上 C ...

  8. CSS自适应网页(CSS第一篇)

    ​CSS的属性: 用浏览器自带的审查元素对一些页面进行调整,快捷键是F12. 网页允许宽度自适应: 在代码的头部加入一行viewport元标签. <meta name="viewpor ...

  9. 原创->CommonsCollections1-DefaultMap链

    今天我打算整点儿不一样的内容,通过之前学习的TransformerMap和LazyMap链,想搞点不一样的,所以我关注了另外一条链DefaultedMap链,主要调用链为: 调用链详细描述: Obje ...

  10. pageoffice6在线编辑word 文件禁止鼠标右键

    有时让用户使用PageOffice只读模式(OpenModeType.docReadOnly)打开Word文件后,为了更好的只读效果,还希望禁用Word中的右键菜单,实现此效果只需创建com.zhuo ...