道阻且长(一) Java核心:5.面向对象(下)

       上一章节大致讲解了,对象的一些基本特征,最好能达到:看见任何一个东西,如果需要用代码实现,我们马上就能够抽象成一个类。本章节将讲解对象的典型特征,在最初接触的时候,我们可能会觉得非常模糊,这点没事,随着逐渐的学习,我们会一直使用到,也就慢慢的能够加深理解。现在不理解,没事,不耽误接下来的学习!

1.封装

(1)什么是封装?

封装:指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系

简而言之:上一章节的奶茶,将含糖量,含奶量这些统一封装在奶茶类里面,谁想使用奶茶的含糖量,只需要通过奶茶这个类获取就行,不用关心内部实现。

(2)怎么封装?

public class MilkTea {  
      
    /* 
     * 对属性的封装 
     * 对奶茶的名称、价格都是其私有属性 
     */  
    private String name ;  
    private double price ;  
      
    /* 
     * setter()、getter()是该对象对外开发的接口 
     */  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getPrice() {  
        return price;  
    }  
  
    public void setPrice(double price) {  
        this.price = price;  
    }    
}  

(3)封装有什么用?

1、良好的封装能够减少耦合【即不用每次实现一个功能,都新建一个POJOjie'ou,Java很多时候都会解耦,就是每个模块只做每个模块的事情,分布式的出现也是这样】。

2、类内部的结构可以自由修改。

3、可以对成员进行更精确的控制。

4、隐藏信息,实现细节。

2.继承

(1)什么是继承?

通过关键词 extends 实现 ,A extends B时候,假如B能够唱,跳,A继承之后,立马就能唱跳,再加上A自身能够Rap,能够:通过一个关键字,减少代码量,同时A能够灵活地拓展自己的功能

(2)怎么继承?

public class Person {  
    public void display(){  
        System.out.println("Play Person...");  
    }  
     static void display(Person person){  
       person.display();  
    }  
 }  


 public class Husband extends Person{  
    public static void main(String[] args) {  
         Husband husband = new Husband();  
         Person.display(husband);      //向上转型  
    }  
 } 

(3)继承有什么用?

1、子类拥有父类非private的属性和方法。

2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展

3、子类可以用自己的方式实现父类的方法。

3.多态

(1)什么是多态?

最容易的理解:爸爸+妈妈(可以理解为一个同样的入口),生了两个孩子,却长得不一样(出口不一样)。

同一棵树,所有的叶子都不一样....这样的例子很多,常见出现在代码的:接口实现,继承重写两个地方。

(2)怎么多态?

   基于接口:

public interface A {  
	// 该接口定义了一个String返回类型的方法,输入字符串str,基于内部不同的实现,最终返回一个String类型的数据
	String returnString(String str);
}  
  
public class B implements A{  

    @Override
    public String returnString(String str){  
        return "我是B," + str;  
    }   
}  

public class C implements A{  

	@Override
    public String returnString(String str){  
	// B,C返回了不同的数据,内部实现了不同的业务逻辑
	String s = "我是另一条业务逻辑";
        return "我是C," + s + str;  
    }   
}  

基于继承: 

// A 本身打印:A and A
public class A {  
    public String show(A obj) {  
        return ("A and A");  
    }  
}  
// B 继承 A,执行的show方法,打印输出的是:B and A  
public class B extends A{  
    public String show(B obj){  
        return ("B and A");  
    }  
}  
// C 继承 A,执行的show方法,打印输出的是:C and A  
public class C extends A{  
  public String show(C obj){  
        return ("C and A");  
    } 
}  

(3)多态有什么用?

提高代码可拓展性,复用率

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油炸小波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值