1.java继承

1.1概念

  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
  • 继承可以使用extendsimplements这两个关键字来实现继承,而且所有的类都是继承于java.lang.Object,当一个类没有继承的两个关键字, 则默认继承object (这个类在java.lang包中,所以不需要import)祖先类。

1.2继承的特性

  • 子类拥有父类非private的属性、方法。
  • 子类可以拥有自己的属性和方法。即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一 个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是Java继承区别于C++继承的一个特性。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

1.3格式

  1. 1 class 父类{
  2. 2 }
  3. 3 class 子类 extends 父类{
  4. 4 }

1.4实例

1.4.1extends关键字

在Java中,类的继承是单一继承, 也就是说,一个子类只能拥有一个父类, 所以extends只能继承一个类。

  1. 1 public class Animal {
  2. 2 private String name ;
  3. 3 private int id:
  4. 4 public Animal() {}
  5. 5 public Animal (String myNameint myid) {
  6. 6 //初始化属性值.
  7. 7 }
  8. 8 public void eat() { //吃东西方法的具体实现 }
  9. 9 public void sleep() { //睡觉方法的具体实观}
  10. 10 }
  11. 11
  12. 12 public class Penguin extends Animal {
  13. 13 }
  14. 14
1.4.2implements关键字

使用implements关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔,下面例子中的A与B)。

  1. 1 public interface A {
  2. 2 public void eat() ;
  3. 3 public void sleep() ;
  4. 4 }
  5. 5 public interface B {
  6. 6 public void show() ;
  7. 7 }
  8. 8 public class C implements A, B{
  9. 9 public void eat() {}
  10. 10 public void sleep() {}
  11. 11 public void show() {}
  12. 12 }
1.4.3super与this关键字

super关键字 : 我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字 : 指向自己的引用。

  1. 1 class Animal {
  2. 2 void eat() {
  3. 3 System.out.println(" animal : eat");
  4. 4 }
  5. 5 }
  6. 6 class Dog extends Animal {
  7. 7 void eat() {
  8. 8 System.out.println(" dog : eat");
  9. 9 }
  10. 10 void eatTest() {
  11. 11 this.eat(); // this 调用自己的方法.
  12. 12 super.eat(); // super 调用父类方法
  13. 13 }
  14. 14 }
  15. 15 Animal a = new Animal();
  16. 16 a.eat();
  17. 17 Dogd = new Dog();
  18. 18 d.eatTest();
  19. 19
1.4.4构造器
  • 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在F类的构造器中显式地通过super 关键字调用父类的构造器并配以适当的参数列表。
  • 如果父类构造器没有参数,则在子类的构造器中不需要使用super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
  1. 1 class SuperC1ass {
  2. 2 private int n;
  3. 3 SuperClass() {
  4. 4 System.out.println("SuperClass()");
  5. 5 }
  6. 6 SuperClass(int n) {
  7. 7 System.out.println("SuperClass(int n)");
  8. 8 this.n = n;
  9. 9 }
  10. 10 }
  11. 11 // SubClass1类继承
  12. 12 class SubClass1 extends SuperClass {
  13. 13 private int n;
  14. 14 SubClass1(){ //自动调用父类的无参数构造器
  15. 15 System.out.println("SubClass1");
  16. 16 }
  17. 17 public SubClass1(int n) {
  18. 18 super(300); //{ 调用父类中带有参数的构造器
  19. 19 System.out.println(”SubClass1(int n):" +n);
  20. 20 this.n = n;
  21. 21 }
  22. 22 }
  23. 23 // SubClass2类继承
  24. 24 class SubClass2 extends SuperClass {
  25. 25 private int n;
  26. 26 SubClass2() {
  27. 27 super(300); //{ 调用父类中带有参数的构造器
  28. 28 System.out.println("SubClass2");
  29. 29 }
  30. 30 public SubClass2(int n){ //自动调用父类的无参数构造器
  31. 31 System.out.println("SubClass2(int n):" +n);
  32. 32 this.n= n
  33. 33 }
  34. 34 }
  35. 35 System.out.println("-----SubClass类继承-----");
  36. 36 SubClass1 sc1 = new SubClass1();
  37. 37 SubClass1 sc2 = new SubClass1(100);
  38. 38 System.out.println("-----SubC1ass2类继------");
  39. 39 SubClass2 sc3 = new SubClass2();
  40. 40 SubClass2 sc4 = new SubClass (200);

2.重写(Override)与重载(Overload)

2.1重写规则

  • 参数列表必须完全与被重写方法的相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5及更早版本返回类型要-样, java7 及更高版本可以不同)。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public, 那么在子类中重写该方法就不能声明为protected.
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是.重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。

2.2重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型:
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个 子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

2.3重写与重载的区别

 区别点 重载方法  重写方法 
 参数列表  必须修改  一定不能修改
 返回类型  可以修改   一定不能修改
 异常  可以修改 可以减少删除,一定不能抛出新的或者更广的异常
 访问  可以修改  一定不能做更严格的限制(可以降低限制)

2.4.1重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改
变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据
需要实现父类的方法。

  1. 1 class Animal {
  2. 2 public void move() {
  3. 3 System.out.println("动物可以移动");
  4. 4 }
  5. 5 }
  6. 6
  7. 7 class Dog extends Animal {
  8. 8 public void move() {
  9. 9 System. out. print1n("狗可以跑和走");
  10. 10 }
  11. 11 }
  12. 12 Animal a = new Animal(); // Animal对象
  13. 13 a.move(); //执行Animal类的方法
  14. 14
  15. 15 Animal b = new Dog(); //Dog对象
  16. 16 b.move(); //执行Dog类的方法
  17. 17

2.4.2重载

重载(overloading)是在一个类里面, 方法名字相同,而参数不同。返回类型可以相同
也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一 无的参数类型列表。
最常用的地方就是构造器的重载。

  1. 1 public class Overloading {
  2. 2 public int test() {
  3. 3 System.out.println("test1");
  4. 4 return 1
  5. 5 }
  6. 6 public void test(int a) {
  7. 7 System.out.println("test2");
  8. 8 }
  9. 9 //以下两个参数类型顺序不同
  10. 10 public String test(int a, String s) {
  11. 11 System.out.println("test3");
  12. 12 return "returntest3";
  13. 13 }
  14. 14 public String test (String s, int a) {
  15. 15 System.out.println(" test4");
  16. 16 return "returntest4"
  17. 17 }
  18. 18 }
  19. 19 Overloading o = new overloading();
  20. 20 System.out.println(o.test()) ;
  21. 21 o.test(1);
  22. 22 System.out.println(o.test(1,"test3"));
  23. 23 System.out.println(o.test("test4",1));
  24. 24

Java继承、重写与重载的更多相关文章

  1. [转帖]Java中重写和重载与多态的关系

    Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67  收藏 更多 分类专栏: java进阶之路   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  2. 在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. java知识点--重写与重载

    重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现.      ...

  4. Java中重写与重载的辨析

    摘要:在我们学习Java过程中,重写与重载使我们在面向对象里要学习的重要知识点之一,那我们看看它们有那些区别: 一.重写 1.概念:简单的说就是子类将从父类继承而来的方法重新实现一次. 2.特点: ① ...

  5. Java:Java的重写与重载区分

    最明显的区别为:重写只存在于子类与父类中,重载存在于一个类中. 具体区别如下: 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重 ...

  6. Java 方法重写方法重载

    1,方法的重载和方法的重写 方法名相同形参列表不通 方法名字的重新定义2,面向过程是分步骤解决问题 用方法组织代码 面向对象是以分类的方式解决问题 用类住址代码3 类是对对象的抽象 对象万事万物都是对 ...

  7. 浅谈Java中重写与重载的区别

    重载和重写是Java中两个截然不同的概念.但是却因为名字相近导致很多人经常混淆. 下面用例子展示出他们之间的区别. 在Java中,重载(overloading) 发生在本类.方法名相同,参数列表不同, ...

  8. Java中重写与重载的区别

    方法重载:关键字overload,方法名和方法的返回类型都相同,方法参数个数和类型不一样方法重写:也叫方法覆盖,关键字override,相对于类继承而言,重写的方法名,返回类型,参数个数,参数类型都要 ...

  9. java继承-重写-super实例补充

    方法重写: 是指子类根据需要父类继承来的方法进行改写,是多态机制的前奏. 重写注意点: 1.重写方法必须和被重写方法具有相同的方法名,参数列表和返回值. 2.重写方法方法不能使用比被重写方法更严格的访 ...

  10. java的重写、重载、覆盖的差别

    多态性  通过继承,一个类能够用作多种类型:能够用作它自己的类型.不论什么基类型,或者在实现接口时用作不论什么接口类型.这称为多态性  重载  每一个类型成员都有一个唯一的签名.方法签名由方法名称和一 ...

随机推荐

  1. CodeReview杂谈

    豆皮粉儿们,大家好,又见面啦,今天由字节跳动的"躬冯"带来一个 code review 的故事. 作者:躬冯 2020年元旦假期到来的时候,孙总攒了个局,又把当年一起创造过屎山的咱 ...

  2. spring整合jdbc方法一

    用了一段时间的spring这,闲来没事做一下spring整合jdbc 目录文件 导入jar包 由于spring的jar包是在myeclipse中自动导入的有些暂时用不到的也没有处理. Emp类 pac ...

  3. 【算法】使用Golang实现加权负载均衡算法

    背景描述 如下图所示,负载均衡做为反向代理,将请求方的请求转发至后端的服务节点,实现服务的请求. 在nginx中可以通过upstream配置server时,设置weight表示对应server的权重. ...

  4. K8S最小硬件配置

  5. Flask(4)- URL 组成部分详解

    URL Uniform Resource Locator 的简写,中文名叫统一资源定位符 用于表示服务端的各种资源,例如网页 下面将讲解 Flask 中如何提取组成 URL 的各个部分   URL 组 ...

  6. 史上最详细的信号使用说明(已被收藏和N次)

    Unix环境高级编程(第三版) 第10章 信号 文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 ...

  7. Javascript 判断 iframe 中的变量是否为对象

    Javascript 判断 iframe 中的变量是否为对象 前言 公司之前的项目中,为了实现模块化,在 web 后端使用了 iframe 来组织框架和页面.由于当时没有很好地规划,iframe 子页 ...

  8. python中模块与包

    #模块与包#在实际项目中,代码的行数可能上万,甚至上几十万,不可能在一个页面内完成,需要多个程序员通力写作#张三,李四,王五......每天收集大家的代码做一个版本,类似乐高积木一样,每个人负责一部分 ...

  9. 利用 Nginx 搭建小型的文件服务器

    利用 Nginx 搭建小型的文件服务器 1.查看 Nginx 配置 android@localhost:/etc/nginx/conf.d$ nginx -hnginx version: nginx/ ...

  10. php 开启报错

    // 开启报错提醒ini_set("display_errors", "On");error_reporting(E_ALL | E_STRICT); // 某 ...