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
2.3 继承的基本语法
3. 继承快速入门
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+" 正在考大学数学");
}
}