0
点赞
收藏
分享

微信扫一扫

封装和继承

1. 封装练习

创建程序,在其中定义两个类:Account 和 Test43 类体会 Java 的封装性。

Account 类要求具有属性:姓名(长度为 2 位 3 位或 4 位)、余额(必须>20)、

密码(必须是六位), 如果不满足,则给出提示信息,并给默认值(程序员自己定)

通过 setXxx 的方法给 Account 的属性赋值。 在 AccountTest 中测试

代码在course43中的com.stulzl.test43包中

先写一个Account类

package com.stulzl.test43;

import java.util.Scanner;

//创建程序,在其中定义两个类:Account 和 Test43 类体会 Java 的封装性。
//Account 类要求具有属性:姓名(长度为 2 位 3 位或 4 位)、余额(必须>20)、
//密码(必须是六位), 如果不满足,则给出提示信息,并给默认值(程序员自己定)
//通过 setXxx 的方法给 Account 的属性赋值。
//在 AccountTest 中测试
public class Account {
    //为了封装,将3个属性设置为private
    private String name;
    private double balance;
    private  String pwd;
    //无参构造器
    public Account() {
    }
    //三个属性的构造器
    public Account(String name, double balance, String pwd) {

        this.setName(name);
        this.setBalance(balance);
        this.setPwd(pwd);
    }

    public String getName() {
        return name;
    }
    //姓名(长度为 2 位 3 位或 4 位)
    public void setName(String name) {
        if(name.length()>=2 && name.length()<=4){
            this.name = name;
        }else{
            System.out.println("名字要求2-4位,默认值 无名");
            this.name="无名";
        }

    }

    public double getBalance() {
        return balance;
    }
    //余额(必须>20)
    public void setBalance(double balance) {
        if(balance>20){
            this.balance = balance;
        }else{
            System.out.println("余额必须>20,默认为0");
        }

    }

    public String getPwd() {
        return pwd;
    }
    //密码(必须是六位)
    public void setPwd(String pwd) {
        if(pwd.length()==6){
            this.pwd = pwd;
        }else{
            System.out.println("密码(必须是六位)默认000000");
            this.pwd="000000";
        }
    }
    //显示账号信息
    public void info(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入密码");
        String pass=scanner.next();//此处密码为查看权限密码,不是属性pwd
        if(pass.equals("123")){
            System.out.println("账号信息 name="+name+" 余额="+balance+" 密码="+pwd);
        }else{
            System.out.println("你无权查看……");
        }
    }
}

在test41中输出

package com.stulzl.test43;


public class Test43 {
    public static void main(String[] args) {
    //创建Account
        Account account = new Account();
        account.setName("jack");
        account.setBalance(60);
        account.setPwd("123456");
        account.info();

        Account account1 = new Account("july",50,"123789");
        account1.info();
    }
}

2. 继承 285

2.1 为什么要继承

封装和继承_位或

普通方法

代码在course43中的com.stulzl.extend包中

Extend类中运行

package com.stulzl.extend;

public class Extend
{
    public static void main(String[] args)
    {
        Pupil pupil = new Pupil();
        pupil.name="银角大王";
        pupil.age=10;
        pupil.testing();
        pupil.setScore(60);
        pupil.showInfo();

        System.out.println("===================");
        Graduate graduate = new Graduate();
        graduate.name="金角大王";
        graduate.age=22;
        graduate.testing();
        graduate.setScore(100);
        graduate.showInfo();
    }
}

Pupil类

package com.stulzl.extend;

public class Pupil
{
    public String name;
    public int age;
    private double score;
    public void setScore(double score)
    {
        this.score=score;
    }
    public void testing()
    {
        System.out.println("小学生 "+name+" 正在考小学数学");
    }
    public void showInfo()
    {
        System.out.println("名字 "+name+" 年龄 "+age+" 成绩 "+score);
    }
}

Graduate类

package com.stulzl.extend;

public class Graduate
{
    public String name;
    public int age;
    private double score;
    public void setScore(double score)
    {
        this.score=score;
    }
    public void testing()
    {
        System.out.println("大学生 "+name+" 正在考大学数学");
    }
    public void showInfo()
    {
        System.out.println("名字 "+name+" 年龄 "+age+" 成绩 "+score);
    }
}

2.2 继承的基本介绍 286

继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中 抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来 声明继承父类即可。画出继承的示意图

2.2.1 示意图 286

封装和继承_位或_02

2.3 继承的基本语法

封装和继承_位或_03

3. 继承快速入门

封装和继承_System_04

3.1 继承写法 287

代码在course43中的com.stulzl.extend.improve_.包中

测试TestExtend

package com.stulzl.extend.improve_;

public class TestExtend {
    public static void main(String[] args) {
        Pupil pupil = new Pupil();
        pupil.name="银角大王~";
        pupil.age=10;
        pupil.testing();
        pupil.setScore(50);
        pupil.showInfo();

        System.out.println("===================");

        Graduate graduate = new Graduate();
        graduate.name="金角大王~";
        graduate.age=22;
        graduate.testing();
        graduate.setScore(80);
        graduate.showInfo();
    }
}

父类Student

package com.stulzl.extend.improve_;

//父类,是Pupil和Graduate的父类
public class Student
{
    //共同属性
    public String name;
    public int age;
    private double score;

    //共同方法
    public void setScore(double score)
    {
        this.score=score;
    }
    public void showInfo()
    {
        System.out.println("名字 "+name+" 年龄 "+age+" 成绩 "+score);
    }
}

子类Pupil

package com.stulzl.extend.improve_;

public class Pupil extends Student
{
//特有方法
    public void testing()
    {
        System.out.println("小学生 "+name+" 正在考小学数学");
    }
}

子类Graduate

package com.stulzl.extend.improve_;

public class Graduate extends Student
{
    //特有方法
    public void testing()
    {
        System.out.println("大学生 "+name+" 正在考大学数学");
    }
}

举报

相关推荐

0 条评论