我是靠谱客的博主 奋斗母鸡,最近开发中收集的这篇文章主要介绍java面向对象三大特性之继承,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 1、继承
      • 1 .1、继承的总说明
      • 1.2、继承的前奏(理论篇为什么使用继承)
        • 1.2.0为什么要用继承? 继承可以减少代码冗余
        • 1.2.0例子待补........
      • 1.3、继承中的成员变量的特点
        • 1.3.0继承中的成员变量的特点
        • 1.3.1实例说明
      • 1.4、继承中成员方法的特点
        • 1.4.0继承中成员方法的特点
        • 1.4.1实例1
      • 1.5、继承中的重写
        • 1.5.0继承中的重写
        • 1.5.1实例
      • 1.6、继承中的重写构造函数

1、继承

1 .1、继承的总说明

  • 1、子类继承父类,可以继承父类的全部属性和方法( 除了父类的构造方法)
  • 2、java只有单继承一个子类只有一个父类不能有多个父类(c+±-)
  • 3、如果定义一个类没有调用extends,则他的父类是:java.lang.Object
  • 4、不同叫法,超类、基类、父类、子类、派生类 `
  • 5、 在子类中可以根据需要对从基类中继承来的方法进行重写。
  • 6、 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
  • 7、重写方法不能使用比被重写方法更严格的访问权限。(由于多态)
  • 8、继承的两个特性
           (1)、继承的单根性(一个子类只有一个父类一个孩子只有一个爹)。
           (2)、继承有传递性(祖宗的迟早是你的
  • 9、继承的语法:继承语法:public 子类 extends父类

1.2、继承的前奏(理论篇为什么使用继承)

1.2.0为什么要用继承? 继承可以减少代码冗余

  • 使用继承我们可以把有共性的代码抽取出来封装成父类,利用继承让子类同样有这样的变量和方法减小代码的冗余度

1.2.0例子待补…

1.3、继承中的成员变量的特点

1.3.0继承中的成员变量的特点

  • 子类只能获取父类中的非私有成员.

  • 变量的使用原则:就近原则。
          (1)、如果有局部变量就是用局部变量
          (2)、如果没有局部变量有子类变量就是用子类变量、子类中有和父类相同的成员变量                    则使用的是子类的成员变量
          (3)、如果没有局部变量也没有子类变量就是用父类变量

  • 如果非要获得和子类重名的父类的成员变量用关键字supper
           (1)、supper.成员变量
            (2)、supper.成员方法(形参列表)

1.3.1实例说明

package inherit.java;
/**
* @author zhao xuke
*
* 2018年10月24日 - 下午8:34:27
*/
public class ExtendsDemo_01 {
public static void main(String[] args) {
Son son = new Son();
son.showName();//子类子中没有的成员变量则获取的是父类的成员变量
son.showAge();//子类和父类都有的成员变量则获取的是子类的成员变量
son.showIq();//子类和父类都有的成员变量,用super来获取父类的成员变量
son.showSex();//成员变量的使用就近原则优先使用局部变量
}
}
class Dad {
String name = "刘备" ;
int age = 50;
String iq = "高";
String sex= "中";
}
class Son extends Dad{
int age = 20;
String iq = "低";
String sex = "男";
public void showName() {
System.out.println("----子类子中没有的成员变量则获取的是父类的成员变量----");
System.out.println("name:" + name);
}
public void showAge() {
System.out.println("----子类和父类都有的成员变量则获取的是子类的成员变量----");
System.out.println("age:" + age);
}
public void showIq() {
System.out.println("----子类和父类都有的成员变量,用super来获取父类的成员变量----");
System.out.println("iq:" + super.iq);
}
public void showSex() {
String sex = "女";
System.out.println("----优先使用局部变量----");
System.out.println("sex:" + sex);
System.out.println("----用this访问本类变量----");
System.out.println("sex:"+ this.sex);
System.out.println("----用super访问父类成员----");
System.out.println("sex:" + super.sex);
}
}

运行结果:
在这里插入图片描述

1.4、继承中成员方法的特点

1.4.0继承中成员方法的特点

  • 子类继承父类后子类对象可以访问父类的非私有成员方法
  • 子类没有重写父类方法时用子类对象调用的是父类的方法
  • 如果父类的方法满足不了子类的需求,我们可以重写父类的成员方法
  • 子类重写父类的法后用子类对象调用与父类同名的方法时,实际调用的是子类重写父类后的子类方法

1.4.1实例1

package inherit.java_01;
/**
* 成员方法的特点
* @author zhao xuke
*
* 2018年10月25日 - 下午5:12:59
*/
public class ExtendsDemo {
public static void main(String[] args) {
Son son = new Son();
son.sleep();//子类对象调用父类的方法
son.eat();//子类调用重写父类的方法
}
}
class Dad{
public void eat() {
System.out.println("喝酒");
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
class Son extends Dad{
public void eat() {
System.out.println("吃饭");
}
}

运行结果:
在这里插入图片描述
分析:
(因为小孩吃饭不喝酒)当父类的吃饭方法eat()不能满足子类的需求时需要重写父类的eat()方法,此时用子类对象调eat()方法时实际上调用的是子类重写父类后的方法

1.5、继承中的重写

1.5.0继承中的重写

  • 重载;参数有多个重名的方法但是方法的参数不同(参数个数,参数类型,参数顺序)不同,与返回值无关

  • 重写(覆盖):子类的方法和父类的一样,当子类重写父类的方法后,使用子类对象调用的就是子类的方法

  • 重写方法的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法,并可以在方法中使用关键字 super.方法(形参列表),来调用父类的方法(因为父类方法如果代码太多不方便复制),这样可以即保有父类的功能,也可以拥有子类特有的功能

  • 重写注释:@Override(重写时可以不加,但是最好加上提供了一个规范) 一般写在 变量/方法/类的上面

  • 不能重写父类 的私有方法

  • 重写后的方法的修饰符的权限要大于等于被重写的方法的权限

1.5.1实例

package inherit.java_02;
/**
* @author zhao xuke
*
* 2018年10月25日 - 下午5:26:45
*/
public class ExtendsDemo {
public static void main(String[] args) {
NewPhone p = new NewPhone();
p.call();
}
}
class Phone{
public void call() {
System.out.println("打电话");
}
}
class NewPhone extends Phone{
@Override
//Alt + ?
public void call() {
System.out.println("录音");
//System.out.println("打电话");//如果打电话这个功能有上万行代码不建议复制过来。建议用关键字super
super.call();
}
}

运行结果:
在这里插入图片描述

分析:旧一代手机打电话的功能满足不了新一代手机既能打电话又能录音的功能,那就重写call()加上录音功能,同时如果重写的call() 还要有父类打电话的功能。如果打电话功能的代码量较大我们可以在子类重写的call()方法中用super关键字调用父类call()这样我们不用复制父类打电话功能的代码,也可以让子类的call()也可以有打电话的功能

1.6、继承中的重写构造函数

未完待续…

最后

以上就是奋斗母鸡为你收集整理的java面向对象三大特性之继承的全部内容,希望文章能够帮你解决java面向对象三大特性之继承所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部