Java 07 封装

一、继承(inheritance)

1.理解

extends 实现继承,当一个类没有显示的继承父类,此父类即Object

2.继承链

object 父类

parent System String 子类

3.单继承

一个父类可以存在多个子类,一个子类只能有一个父类

/**
父类 F M  子类 A B C
*/
public class F{
    public void play();
}
class M{
    public void play();
}
class A extends F{}   //A继承F
class C extends F{
    M mother;   //一个父亲 一个母亲
}
//错误的继承
class B extends F,M{}

4.super

1)super表示存在继承的子类中,显示查找父类的信息。

2)this:代表调用者自身;super:代表调用者的父亲对象,只能使用不能破坏也看不到地址

3)super.属性:当子类与父类的属性同名,访问父类的属性

4)super.方法():在子类与父类的方法签名相同|重写,访问父类方法。

5)super():在子类的构造器首行,显示调用父类的构造器;任何的构造器默认是调用父类的空构造。

5.Override重写

1)overload 重载:两同三不同:同一个类方法名相同,形参类型 个数 顺序不同。

2)override 重写:子类中方法签名相同

/**
servlet: doGet doPost方法重写
*/
public class Servlet {
    public Servlet() {
        service();
    }
    public void service() {
        this.doGet();
        this.doPost();
    }
    public void doGet() {
        System.out.println("Servlet doget");
    }
    public void doPost() {
        System.out.println("Servlet doPost");
    }
    
    public static void main(String[] args) {
        new HttpServlet();
        new FtpServlet();
    }
}
​
class HttpServlet extends Servlet{
    public HttpServlet() {
        super();
    }
    @Override
    public void doGet() {
        System.out.println("HttpServlet doget");
    }
    @Override
    public void doPost() {
        System.out.println("HttpServlet doPost");
    }
    
}
​
class FtpServlet extends Servlet{
    public FtpServlet() {
        super();
    }
    @Override
    public void doGet() {
        System.out.println("FtpServlet doget");
    }
    @Override
    public void doPost() {
        System.out.println("FtpServlet doPost");
    }
}
​
​

二、debug(排除错误)

1.打断点

在main()对象中双击断点图标

2.观察与代码执行

F5:单步进入

F6:单步跳出----->逐行执行

F7:单个方法|功能执行

F8:断点结束 下一个断点

三、封装(encapsulation)

1.理解

通过访问权限 各司其职 保护数据

2.四个访问权限

public 公开的公共的;一览无遗

protected 受保护的(父类子类之间);合法继承

friendly|default:友好的默认的(空着);家庭和睦

private :私有的 自私自利

本类:public protected friendly private

同包其他类:public protected friendly

不同包子类(子对象访问):public protected

不同其他类:public

3.javaBean

存储数据: po jo vo bo

空构造;属性私有化;setter与getter 访问器;重写 equals

toString

public class Person {
    private String name;
    private int age;
    private String gender;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (gender == null) {
            if (other.gender != null)
                return false;
        } else if (!gender.equals(other.gender))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
    }
    
    
}
​

4.各司其职

用户登录案例:

分层:

javaBean:

/**
 * javaBean 存储数据
 * 
 * */
public class User {
    //用户名
    private String uname;
    //密码
    private String upwd;
    //构造器
    public User() {
        
    }
    //getter和setter访问器
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getUpwd() {
        return upwd;
    }
    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }
    //重写  equal toString
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (uname == null) {
            if (other.uname != null)
                return false;
        } else if (!uname.equals(other.uname))
            return false;
        if (upwd == null) {
            if (other.upwd != null)
                return false;
        } else if (!upwd.equals(other.upwd))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "User [uname=" + uname + ", upwd=" + upwd + "]";
    }
    
}

dao层

/**
 * 与数据库交互
 * */
public class UserDao {
    //存储模拟数据  
    public User getDao() {
        User user=new User();
        //用户名 xiaoxiao  密码:123456
        user.setUname("xiaoxiao");
        user.setUpwd("123456");
        return user;
    }
}

service层

/**
 * service  登录业务   承上启下
 * */
public class UserService {
    //使用私有的  安全性
    private UserDao serviceDao;
    public UserService(){
        serviceDao=new UserDao();
    }
    //登录
    public boolean UserLogin(User input) {
        //数据库获取数据
        User dbDate=serviceDao.getDao();
        return dbDate.equals(input);
    }
}

web层

/**
 * 用户界面
 * */
public class UserWeb {
    private UserService userSerive;
    public UserWeb() {
        userSerive =new UserService();
    }
    public String inputUser(){
        //从键盘输入用户名和密码
        String uname=MyUtil.getStrFromConsole("请输入用户名:");
        String upwd=MyUtil.getStrFromConsole("请输入密码:");
        User user=new User();
        user.setUname(uname);
        user.setUpwd(upwd);
        //登录 要比较用户名和密码
        boolean success=userSerive.UserLogin(user);
        //返回成功和失败
        return success?"成功":"失败";
    }
}
​

app模式

public class UserApp {
​
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UserWeb userWeb=new UserWeb();
        String result=userWeb.inputUser();
        System.out.println(result);
    }
}

5.封装实现单例

利用封装实现单例 a single instance of class

  • 1、私有的构造器

  • 2、创建一个私有的静态的属性 对象供外部访问

  • 3、提供公共的静态方法 访问该属性

    /**
     * 1.私有构造器
     * 2.创建私有的静态属性,对象供外部访问
     * 3.提供公共静态方法,访问该属性
     * */
    public class Car {
        //1.创建私有的静态属性,对象供外部访问
        private static Car car=new Car();
        //2.私有构造器
        private Car() {
            
        }
        //提供公共静态方法,访问该属性
        public static Car car() {
            return car;
        }
    }
    public class CarApp {
    ​
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Car car1=Car.car();
            Car car2=Car.car();
            System.out.println(car1==car2);
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值