Java基础编程(三大特征)

封装、继承、多态

1. 封装

1.1 介绍

        封装(encapsulation)就是把抽象出的数据  [属性] 和对数据的操作  [方法]  封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。

1.2 封装的理解和好处

1) 隐藏实现细节:方法(连接数据库)<--调用(传入参数..)
2) 可以对数据进行验证,保证安全合理
                Person {name, age}
                Person p = new Person();
                p.name = "jack" ;
                p.age = 1200;

1.3 封装的实现步骤 (三步)

1) 将属性进行私有化private【不能直接修改属性】
2) 提供一个公共的(public) set 方法,用于对属性判断并赋值
        public void setXxx (类型参数名)0/Xx表示某个属性
                //加入数据验证的业务逻辑
                属性 = 参数名;
        }
3) 提供一个公共的(public)get方法,用于获取属性的值
        public 数据类型 getXxx() { //权限判断,Xx某个属性
                return xx;
        }

案例练习:
​​​​
创建程序,在其中定义两个类: Account和AccountTest类 体会Java的封装性。
1. Account类要求具有属性: 姓名(长度为2位3位或4位)、余额(必须>20)、密码(必须是六位),如果不满足,则给出提示信息,并给默认值(程序员自己定)
2. 通过setXxx的方法给Account的属性赋值。
3. 在AccountTest中测试

package com.zakedu.encap;
 /**
 *创建程序,在其中定义两个类:Account和AccountTest类体会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 位 3 位或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 showInfo(){
 //可以增加权限的校验
System.out.println("账号信息name="+name+"余额="+balance+"密码"+pwd);
 // if(){
 // System.out.println("账号信息name="+name+"余额="+balance+"密码");
 // }else{
 // System.out.println("你无权查看...");
 // }
} }

 package com.zakedu.encap;
 public class TestAccount{
 public static void main(String[]args){
 //创建Account
 Account account =new Account();
 account.setName("jack");
 account.setBalance(60);
 account.setPwd("123456");
 account.showInfo();
 } }

2. 继承

2.1 继承基本介绍

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

2.2 继承的基本语法

继承给编程带来的便利:
        1) 代码的复用性提高了         2) 代码的扩展性和维护性提高了

2.3 继承的细节问题

1) 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访 问,要通过父类提供公共的方法去访问
2) 子类必须调用父类的构造器,完成父类的初始化
3) 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无 参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。
4) 如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)
5) super在使用时,必须放在构造器第一行 (super只能在构造器中使用)
6) super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
7) java所有类都是Object类的子类,Object是所有类的基类.
8) 父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)
9) 子类最多只能继承一个父类(指直接继承),即java中是单继承机制。
10) 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系

2.4 继承的本质分析:

案例:

 public class ExtendsTheory {
 public static void main(String[] args) {
 Son son = new Son();//内存的布局
//?-> 这时请大家注意,要按照查找关系来返回信息
//(1) 首先看子类是否有该属性
//(2) 如果子类有这个属性,并且可以访问,则返回信息
//(3) 如果子类没有这个属性,就看父类有没有这个属性(如果父类有该属性,并且可以访问,就返回信息..)
//(4) 如果父类没有就按照(3)的规则,继续找上级父类,直到Object...
System.out.println(son.name);//返回就是大头儿子
//System.o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值