Java 继承 与 抽象类

  • 继承
  • 抽象类

继承

1、一个类 从另一个类中派生而来,就是继承。
2、继承也是面向对象语言的三大特征之一。 面向对象的语言都具有三大特征,分别是 封装继承多态

3、什么时候需要继承?
创建类时,如果已有的某个类中的成员变量或成员方法与当前类相同,此时就可以考虑采用继承的方式。

4.继承时 要使用 extends关键字

public class son extends father{public static void main(String[] args) {}
}class father{}

5.被继承的类 我们一般称为 超类(或父类)。; 继承超类的类 称为 子类。在Java中允许多重继承,C继承 B B 继承 A ;

6.超类中 非私有成员变量成员方法可以被子类继承,亦这些成员变量和方法成为了子类的成员变量和方法。如果是私有的成员变量和方法不能被继承。在子类中也不可以被使用。

public class son extends father{public static void main(String[] args) {new son();}public son(){super.kiri="牛基";System.out.println(super.kiri);}
}class father{private String name;public String kiri="李四";private void nameti(){System.out.println("张三");}
}

7.有可能 子类 中定义的成员变量 与超类中的 成员变量同名,此时我们通过子类来使用该成员变量时,使用的是子类中的成员变量

public class son extends father{public static void main(String[] args) {new son();}public son(){super.kiri="牛基";nameti();}@Overridepublic void nameti(){//重写的权限修饰符的范围要大于或等于,重写前(也就是父类中)的权限修饰符的范围。//假如 父类是 private,则没有重写的概念,因为private方法,并没有被继承。System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}

8.在成员变量 同名情况下,如果子类要使用父类的同名的成员变量。需要在成员变量前 加super关键。此时super表示的就是父类的对象

public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){System.out.println(super.kiri);}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}

9.如果子类中具有与父类同名的方法(参数完全相同)。此时会发生方法的覆盖。这就是方法的重写。如果设计子类时,如果父类中的某个方法不满足子类的要求,就可以进行方法的重写(子类的方法及参数与父类的某个方法及参数完全一致,返回值和修饰符可以不一致)。在子类中调用父类中被重写的方法也要使用super关键。

public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){super.nameti();}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}
}

10.在Java中,如果 一个类 继承了 另一个类,这两个类就具有了关系,它们具有父类与子类的关系。

11.如果一个子类被实例化,首先要实例化 它的父类的对象,然后用super来引用父类对象并把super交给子类使用。此时super就是一个引用类型的变量,它引用的就是父类的对象,然后再 实例化子类的对象,此时也会给 子类传递一个引用类型的变量this,它引用的就是当前子类的对象。

public class son extends father{private String kiri="李四的儿子";public static void main(String[] args) {new son();}public son(){//父类没有无参构造方法时,必须调用有参构造方法,且这条语句要在子类构造方法的第一条语句,调用super("父亲的有参构造方法"); System.out.println("son");}@Overridepublic void nameti(){System.out.println("张三的儿子");}
}class father{private String name;public String kiri="李四";public void nameti(){System.out.println("张三");}//当写了构造方法(不管你写的构造方法是有参的还是无参的)时,默认提供的无参构造方法,将不会被调用。public father(String name){this.name=name;System.out.println(name);}
}

12.任何类被实例化都必须调用构造方法,通过构造方法来初始化成员

13、如果超类没有无参的构造方法(它一定有带参的构造方法),子类就必须要有显示的构造方法,且在构造方法的第一行调用超类的构造方法。Super(嘻嘻嘻,xx);之所以这样,是因为任何类被实例化时都必须对成员变量进行初始化,实例化子类的对象之前必须要实例化超类的对象,以保证超类中的成员变量已经被初始化,如果 超类中有带参的构造方法,这就说明超类的初始化要通过带参的构造方法来完成以保证 成员变量能够接受外部的传值。

14、在Java中 不允许一次继承多个类,也就是extends 类名1,类名2…。这种继承方式称为多继承。在C++中允许多继承。在多继承的情况下,可能会发生超类的成员变量和成员方法 同名。造成子类的混乱。如果在实际开发中,真的需要进行 多继承,Java提供了三种解决方案,第一,采用组合的方式(把本就是超类的对象作为子类的一个成员变量)第二种方案就是采用接口第三种方案 就是采用内部类

采用组合来实现继承的功能,可以减少对类的侵入,这也是当前被多数人推崇的方式。

抽象类

在 设计类时,有的类中的方法没有办法确定它的具体行为,此时就可以把该方法声明为抽象的方法。抽象方法需要使用abstract关键字进行声明。

public class son extends father{}abstract class father{}

如果一个类中有抽象的方法,那么该类就必须声明为抽象类

 public class son extends father{@Overridepublic void nameti() {}
}abstract class father{//abstract 和 public不能省略(但是在接口中可以省略)(接口中对于表达抽象方法)abstract public void nameti();
}

1.抽象类 不能被实例化为对象。原因在于,在一个具体的对象上,不能够存在抽象的 成员

public class son extends father{public static void main(String[] args) {father yi=new son(); // 但是可以多态 来使用yi.nameti();}@Override//抽象类中的抽象方法可以自定义抽象方法的权限修饰符,//(三种,默认(不写),protected,public,(private不能与abstract搭配))//而在接口中,抽象方法 必须是public修饰。。(默认就是public)public void nameti() {   //重写的权限修饰符的范围要大于或等于,重写前(也就是父类中)的权限修饰符的范围。//假如 父类是 private,则没有重写的概念,因为private方法,并没有被继承。System.out.println("重写的");}
}abstract class father{abstract public void nameti();
}

2.抽象类只能被继承,它只能作为超类使用。此时,子类就必须实现抽象类的抽象方法
3.在 实现抽象方法时,方法上面应该加上 @Override 注释,这样的编译器就知道该方法是重写或实现超类的方法(抽象方法),如果方法被加上了 @Override ,那么方法的名称和参数只能与超类的方法保持一致,否则编译不能通过
4.抽象类也可以有自己的构造(也就是也有自己的构造方法),它只能作为超类使用,被子类继承,所有与继承有关的规则,在这种情形都适用。

public class son extends father{public static void main(String[] args) {new son();}public son(){super("抽象父类构造方法");System.out.println("son");}@Overridepublic void nameti() {}
}abstract class father{public father(String name){System.out.println(name);}abstract public void nameti();
}

Java 继承 与 抽象类相关推荐

  1. Java实验三 Java继承、抽象类与接口(13题)

    文章目录: 一:基本问题 二:说明下面说法是否正确 三:编写一个Java应用程序.设计一个汽车类Vehicle,包含的成员属性有:车轮个数wheels和车重weight.小车类Car是Vehicle的 ...

  2. 腾讯架构师讲解Java接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...

  3. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

  4. 10.java基础----继承、抽象类- 编程

    命名要求:1. 类名,接口名,枚举名,注解名使用大驼峰2. 变量名,方法名,包名均使用小驼峰3. 常量名全大写,多个单词下划线分割4. 名字要见名知意,如果不知道对应的英文,可以使用拼音代替.不可使用 ...

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

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

  6. 1-10 Java 继承、protected和abstract抽象类

    文章目录 1.继承 1)概念 2)代码例子 2.重写 1) 业务背景 2)代码实现 3)代码说明 3.抽象类,抽象方法 1)业务场景 2)abstract,抽象的 4.protected 修饰符 1. ...

  7. 11.0_[Java 继承]-继承/重写/抽象类/抽象方法/ final 修饰符

    ################################################## 目录 继承 什么是继承 继承语法 super 关键字 如何使用继承 java.lang.Objec ...

  8. java 继承、super、this、抽象类

    java 继承.super.this.抽象类 三大特性--继承 方法重写 super关键字 this关键字 抽象类 第一章 继承 1.1 概述 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独 ...

  9. Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积。 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法。

    Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积. 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法, ...

最新文章

  1. Android UI进阶之旅9 Material Design之沉浸式设计
  2. scrollToItemAtIndexPath使用
  3. 二叉树中最大/最小深度与叶子数
  4. linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)
  5. Map的putAll方法踩坑实记(对象深拷贝浅拷贝)
  6. 收藏!AI 最全干货超级大列表,100+ 张速查表全了!
  7. GitHub Actions 支持 skip ci 了
  8. python twisted教程一,异步编程
  9. js路由在php上面使用,director.js实现前端路由使用实例
  10. react初识生命周期
  11. 数据库设计需要注意什么
  12. spring源代码分析
  13. SMILES Enumeration
  14. 斯坦福自然语言处理(1)——三元组的使用
  15. docker容器内开启22 ssh_细述docker容器中创建SSH服务镜像
  16. 树莓派4b常用资料汇总
  17. JavaScript EventListener
  18. MySQL Java JDBC
  19. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 K-密码
  20. Linux kernal API

热门文章

  1. 为什么打不开jar文件?
  2. 现在最流行的Java开发技术是什么?
  3. python 自动抢红包_基于Airtest实现python自动抢红包
  4. linux stlport 编译,VC++2010下编译STLport,Boost
  5. 【Aegisub相关】loop修饰语实现对应的源码
  6. element组件---Form
  7. 20200716-java基础吃货联盟项目
  8. 深入Android系统权限和root权限
  9. 20天时间,一个人怎么搞定这个后台管理项目
  10. C小程序——统计字符串中出现指定串abcd的次数