首页 > 编程语言 >java之继承

java之继承

时间:2023-05-29 23:23:16浏览次数:36  
标签:java 继承 子类 void int money 父类 public

继承:实现代码的复用

子类继承父类的属性和方法,也可以覆写父类的属性和方法。

格式:

  class 父类{ }

  class 子类 extends 父类 { }  

 

实例化子类对象时,先调用父类的构造方法,再调用子类的构造方法(构造方法的目的是类属性的初始化);

为什么要先调用父类的构造方法呢?

因为子类继承了父类,且父类中的属性也要初始化,所以要先调用父类的构造方法,初始化父类中的属性

class Person {
    private int age;

    public void setAge(int age) {
        if (age < 0 || age > 200)
            age = 0;
        else {
            this.age = age;
        }
    }

    public int getAge() {
        return age;
    }    

    public void printInfo() {
        System.out.println("age = "+age);
    }

    public Person () {
     System.out.println("Person ()");
}
public Person (int age) { System.out.println("Person (int age)"); this.age = age; } } class Student extends Person{ private String school; public void setSchool(String school) { this.school = school; } public String getSchool() { return school; } public Student(String school) { /* will call the super() */ //super();//如果子类调用父类中默认的构造方法,super()写不写都行 super(5); //如果子类调用父类中带参数的构造方法,super就必须写,且还要带参数 System.out.println("Student(String school)"); this.school = school; } /* override */ public void printInfo() {//方法的重载 System.out.println("school = "+school+"; age = "+getAge()); } } public class Ext4 { public static void main (String args[]) { Student stu = new Student("ustc"); //stu.setAge(10); System.out.println(stu.getAge()); System.out.println(stu.getSchool()); stu.printInfo();//子类中有实现printInfo方法,就调用子类中的方法;如果没有实现,将会调用父类中的方法 } }

 

super关键字:

  1. 子类的构造方法里会默认调用super()

  2. 可以在子类构造方法中首行自行调用super(),可加参数

  3. super表示父类,可以用super.xxxx调用父类方法

final关键字:

  1. 被final修饰的类不能有子类

  2. final方法不能被覆写

  3. final变量变成常量,不能被修改

 

继承的限制:

  1. 父类中的私有属性不能被子类访问

  2. 父类中的私有方法不能被子类访问

  3. 子类覆写的方法不能缩小父类方法的权限

class Father {
    private int money;// 1.父类中的私有属性不能被子类访问   

    public int getMoney() {return money; }
    public void setMoney(int money) {this.money = money; }

    public void printInfo() {System.out.println("This is Father");}

    private void printInfo2() {System.out.println("This is Father");}//2. 父类中的私有方法不能被子类访问
}

class Son extends Father{
    private void printInfo() {System.out.println("This is son");}//会出错,编译不过,因为3.子类覆写的方法不能缩小父类方法的权限

    public void printInfo2() {System.out.println("This is Father");}//printInfo2不是对父类中printInfo2方法的复写,
                                        //因为父类中的方法是私有的,子类都不知道有这个方法,这个是子类自己实现的方法 } public class Ext5 { public static void main (String args[]) { Son son = new Son(); son.setMoney(100);//由于money是父类中私有的属性,所以不能用son.money=100,即1.父类中的私有属性不能被子类访问 //son.printInfo(); } }

 

抽象类:规定子类必须实现的方法,起“模板”作用

格式:

abstract class 类名 {
    属性;
    普通方法 { }
    
    // 抽象方法
    访问权限  abstract 返回值类型 方法名 (参数) ; /* 只需要声明,不需要实现 */
}

  1. 抽象类不能实例化对象

  2. 子类必须覆写全部抽象方法(子类要实现全部的抽象方法)

abstract class Father {//抽象类
    private int money;    

    public int getMoney() {return money; }
    public void setMoney(int money) {this.money = money; }

    public abstract void study();//抽象方法
}

class Son extends Father{
    public void study() {System.out.println("I am study"); }//2. 子类要实现全部的抽象方法
    
}

public class Ext6 {
    public static void main (String args[]) {
        //Father f = new Father();//1. 抽象类不能被实例化对象,会编译出错
        Son son = new Son();
        son.study();
    }
}

 

接口:跟抽象类相似,起“模板”作用;子类可以实现(implement)多个接口,突破“单继承”的限制

格式:  

// 接口由全局常量、公共的抽象方法组成
interface 接口名称 {
    全局常量;
    抽象方法;
}

如:interface A {
    public static final i = 10;
    public abstract int getNumber( );
}

  子类必须覆写全部抽象方法(子类要实现全部的抽象方法)

abstract class Father {
    private int money;    

    public int getMoney() {return money; }
    public void setMoney(int money) {this.money = money; }

    public abstract void study();
}

interface A {
    public static final int i = 10;//将public static final删除,其还是等效于有public static final,且i不能被修改(i是全局常量)
    public abstract int getNum();//将public abstract删除,其也等效于有public abstract
}

interface B {
    public static String name = "InterfaceB";
    public abstract String getName();
}

class Son extends Father implements A,B{//子类不仅可以继承父类(只能继承一个父类),还可以实现多个接口
    public int getNum() {return i;}//子类必须覆写全部抽象方法(子类要实现全部的抽象方法),在{}中写i++;会编译出错,因为i是全局常量
    public String getName() {return name;}
    public void study() {System.out.println("I am study"); }    
}

public class Ext7 {
    public static void main (String args[]) {
        Son son = new Son();
        System.out.println(son.getName());
        son.study();
    }
}

 

 

标签:java,继承,子类,void,int,money,父类,public
From: https://www.cnblogs.com/zj-studyrecoding/p/17441996.html

相关文章

  • 2.2. 继承与多态
    继承和多态是面向对象编程的两个重要概念,它们使得我们可以创建更加通用、可扩展的代码。2.2.1.继承继承是一种创建新类的方式,新类(子类)从现有类(父类)继承属性和方法。子类可以重写或扩展父类的功能。要创建一个子类,可以使用 extends 关键字:classSubClassNameextendsParent......
  • Java中的Stream基本使用
    一Java中的流库Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操作。简而言之,StreamAPI......
  • Java8 List集合如何移除满足条件的元素
    1.移除List<String>中指定元素for(inti=assSupplementList.size()-1;i>=0;i--){TypgHouseOrderAssessmentSupplementitem=assSupplementList.get(i);if(item.getBzx().contains("新建房屋")){ass......
  • java集合过滤出符合条件的List元素集合(lambda表达式)
    使用Java8中的lambda表达式过滤ModelMapmodel=newModelMap();TSmClazzTSmClazz=tSmClazzService.get(id);List<Student>students=TSmClazz.getStudents();if(flag.equals("0")){List<Student>boys......
  • 【Java】Lambda表达式(三)
    常用Lambda表达式1、遍历finalList<String>list=Arrays.asList("zhangsan","lisi","wangwu","lishan");list.forEach(System.out::println);;2、排序finalList<String>list=Arrays.asList("zhangsan",......
  • 基于JAVA的springboot+vue医院信息管理系统、医院挂号管理系统,附源码+数据库+论文+PPT
    1、项目介绍任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了医院信管系统。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括首页,个人中心,用户......
  • java之封装
    封装:将属性和方法封装为一个整体,属性和方法都有权限限制classPerson{privateintage;//私有属性,只能在本类中访问publicvoidsetAge(intage){if(age<0||age>200)age=0;else{this.age=age;......
  • java类的引入
    对比: 构造方法:1.方法名和类名相同2.方法没有返回值,且用public修饰3.可以有任意多个参数(默认是没有参数)注:可以有多个构造函数;当在实例化这个类的对象时,如果实例化的对象没有带参数,则调用没带参数的构造函数classPerson{Stringna......
  • 002_Java的环境
    002_Java的环境JDK的删除删除Java的安装目录删除JAVA_HOME删除path下的Java目录配置JDK我的电脑-右键-属性-环境变量新建JAVA_HOME,将安装路径复制进去配置path验证版本代码:java-version......
  • Java中的多态性
    多态性是面向对象编程的一项核心概念之一,它允许程序员使用不同的方式来处理不同的对象类型,而不必知道实际对象类型。在Java中,多态性可以通过继承和接口来实现。继承的多态性在Java中,多态性可以通过继承来实现。子类可以继承父类的方法和属性,并且还可以覆盖它们,使得它们在子类中......