中国驰名商标:java 的 四 个 基 本 特 性 ——封装 继续 多态 抽象

admin 3周前 (09-07) 科技 45 2

遇上明天就照样五一c小长假了,准备在这几天写几篇原创文章,供人人一起学习。

首先今天就来好好地唠一唠,到底java的那几个特征都是什么呢?到底怎么用呢?信赖一定有一些小白对此会有些懊恼,没关系的,谁还不是从那个时刻过来的呢!接下来我来一步一步的由潜到深的谈一谈我的看法,下面是我要说的内容

1.总体归纳综合

2.观点的明了

3.代码示例而且剖析

4.小我私家心得总结

1.总体归纳综合

sequenceDiagram
封装->>继续: java的四个基本特征
多态->>抽象: java的四个基本特征

2.观点的明了

  • [1] 封装:
- 在面向工具程式设计方式中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方式。
封装可以被认为是一个珍爱屏障,防止该类的代码和数据被外部类界说的代码随机接见。
要接见该类的代码和数据,必须通过严酷的接口控制。
封装最主要的功效在于我们能修改自己的实现代码,而不用修改那些挪用我们代码的程序片断。
适当的封装可以让程式码更容易明了与维护,也加强了代码的安全性。
通俗一点的可以这么明了,实在生涯中有许多例子的,我来打几个譬喻,

例如:我们都使用果QQ这个谈天软件的,那么咱们要是想要使用它的话就必须要先注册

,等注册好的时刻下次我们在直接输入我们自己设定的密码就可以了,不需要举行其他的操作

这个历程实在就是把QQ内里的数据给封装起来了,防止用户随

意更改,只有程序员才可以,这样他便可以珍爱程序的安全性

也就是说用户不需要直到QQ他是怎么执行的,内部是怎么实现的,对用户举行隐藏起来了
    另有一种注释也可以说明:好比说小我私家计算机有许多组件——CPU 内存  磁盘  风扇  等等... 
    
    我们不需要直到他的个个组件之间是怎么联系的,只要知道他们的个个功效是若何实现的就可以了
    
    生涯中的例子实在有许多许多 我就不逐一说了。(要是还不明了可以私信或者谈论区留言)
  • [2] 继续
  • 继续”(Inheritance),
继续是指一个对度象直接使用另一工具的属性和方式。事实上,我们遇到的许多实体都有继续的寄义。例如,问若把汽车看成一个实体,它可以分成多个子实答体,如:卡车、公共汽车等。这些版子实体都具有汽车的特征,权因此,汽车是它们的"父亲",而这些子实体则是汽车的"孩子"(然则孩子也会有自己新发生的特征)。子类是父类的特殊化,也就是子类的实例(工具)一定是父类的实例 ,然则反过来不一定确立{好比说:一个圆他一定是几何图形,但反过来几何图形他不一定就是圆呀!还会有许多的呀}
同样也说一个通俗易懂的例子:好比说,你家的家谱图,这实在就是一个很明显的一个继续关系

你的爸爸继续了你的爷爷(也就是子类继续父类),那么你的爸爸一定会有可你爷爷相同的特征,然则呢! 你一定会发现你有一些特征是差别于你的爷爷的(固然也差别于你的奶奶),你会有你自己举世无双的特征,这就是继续的关系
  • [3] 多态
- 观点:统一操作作用于差别的工具,可以有差别的注释,发生差别的执行效果,这就是多态性。简朴的说:就是用父类的引用指向子类的工具(变量)。

缘故原由:我们知道,封装可以隐藏实现细节,使得代码模块化;

继续可以扩展已存在的代码模块(类);
它们的目的都是为了代码重用。而多态除了代码的复用性外,还可以解决项目中紧巧合的问题,提高程序的可扩展性.。

耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的剖析把他分解成一个一个子模块,子模块提供稳固的接口,到达降低系统耦合度的的目的,模块模块之间只管使用模块接口接见,而不是随意引用其他模块的成员变量。

有两个利益: 1. 应用程序不必为每一个派生类编写功效挪用,只需要对抽象基类举行处置即可。大大提高程序的可复用性。//继续 2. 派生类的功效可以被基类的方式或引用变量所挪用,这叫向后兼容,可以提高可扩充性和可维护性。//多态的真正作用, 可以用在方式的参数中 和 方式的返回类型中。 (子类变量引用父类的变量)
  • [4] 抽象:
就是把一个工具剖析出各个属性, 来替换表达的手法 。
抽 就是抽离;象 ,表复象。表示出来的部门
好比一棵树。整个一看我们就知道是树,然则详细是为什么呢

这制样就要拿树和其它器械比出不一样的地方,这些地方就是抽象出来的。

抽象出来的器械脱离了树自己,也就变得没有意义,然则组合起来百就是树的观点。

好比一棵树,10米高,树皮粗拙,树叶是针形,树干很直,等等。这些属性组合起来会感受是一颗松树。然则单独说 10 米,没有工具的话,就不知道这个是说的什么器械。

编程上将工具抽象化是很有用的一个方式,能将死板的数据与单一度工具对应起来,这样易于明了,也便于编程。

例如在编写学员治理系统。

学生的界说,首先要有名字,再有性别,问再有学号,等等等等。这些就是抽象出来的属性

3.代码示例而且剖析

  • [1] 多态
public class Main {
    public static void main(String[] args) {
        // 给一个有通俗收入、工资收入和享受国务院特殊津贴的小伙伴算税:
        Income[] incomes = new Income[] {
            new Income(3000),
            new Salary(7500),
            new StateCouncilSpecialAllowance(15000)
        };
        System.out.println(totalTax(incomes));
    }

    public static double totalTax(Income... incomes) {
        double total = 0;
        for (Income income: incomes) {
            total = total + income.getTax();
        }
        return total;
    }
}

class Income {
    protected double income;
//组织方式
    public Income(double income) {
        this.income = income;
    }
//界说一个方式
    public double getTax() {
        return income * 0.1; // 税率10%
    }
}
//子类Salary继续父类Income
class Salary extends Income {
	//组织方式
    public Salary(double income) {
    	//super挪用了继续的Salary中的组织方式
        super(income);
    }

    @Override
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }
        return (income - 5000) * 0.2;
    }
}

class StateCouncilSpecialAllowance extends Income {
    public StateCouncilSpecialAllowance(double income) {
        super(income);
    }

    @Override
    public double getTax() {
        return 0;
    }
}

输出:800.0

考察totalTax()方式:行使多态,totalTax()只需和income来打交道它完全不需要知道要StateCouncilSpecialAllowance和Salary的存在,就可以完全计算出获得的税,若是我们要增添一种稿费的收入,只需要重income中派生出来,然后准确笼罩getTax方式()就可以,把新的类型传入给getTax()就可以了
,不需要在重新修改代码

可以看出:多态是一个何等壮大的功效,就是允许添加更多类型的子类实现功效扩展,却不需要修改基于父类的代码

  • [2] 继续
public class Bike {
	int speed;
	int brand;
	int colornum;
	//组织方式
	Bike(){
		System.out.println(" call bike constructor");
	}
	public void speedUp() {
		speed = 0;
		System.out.println(" too slow");
	}
	public void presshorn() {
		System.out.println(" I am riding the bike");
	}
}

public class SpeedBike extends Bike{
	/**
	 * super可以挪用数据成员及其组织方式
	 */
	SpeedBike(){//子类的组织方式
		super();
		super.colornum=12;//子类挪用数据成员
		super.presshorn();
		System.out.println("call bike construction");	
	}
	public void ride() {
		System.out.println("I am riding the bike");
	}
	/**
	 * super可以挪用父类的方式
	 */
	public void speedUp() {
		super.speedUp();
		speed+=10;
		System.out.println("so fasyt! ," + " my speed is " + speed + " now");
	}
}

public class DemoBike{
	public static void main(String[] args) {
		SpeedBike aride = new SpeedBike();
				aride.presshorn();
				aride.speedUp();
				aride.ride();
	}
}

输出:
call bike constructor
 I am riding the bike
call bike construction
 I am riding the bike
 too slow
so fasyt! , my speed is 10 now(这个输出代码就是笼罩重写了父类的方式)
I am riding the bike

  • [3] 抽象
    若是一个class界说了方式,但没有详细执行代码,这个方式就是抽象方式,抽象方式用abstract来实现,由于无法执行抽象方式,因此这个类必须申请为抽象类

例如:Person 类界说了抽象方式run(),那么,在实现子类Student的时刻,就必须笼罩run()方式

public class Main {

	public static void main(String[] args) {
		Person p= new Student();
		p.run();
	}
}
abstract class  Person() {
	public abstract void run();
}
class Student extends Person{
	@overriding
	public void run() {
		System.out.println("Student . run");
	}
}

  • [4] 封装
package com.fengzhuang;
class Car{
    private String name;//私有成员,名称
    private String color;//私有成员,颜色
    private String size;//私有成员,巨细 
    //获得String类型名字的方式,最后return 返回去
    public String getName(){
        return name;
    }
    public String getColor(){
        return color;
    }
    public String getSize(){
        return size;
    }
    //由于方式名和参数名相同,所有用this
    public void setName(String name){
        this.name=name;
    }
    public void setColor(String color){
    this.color=color;
    }
    public void setSize(String size){
    this.size=size;
    }
}

package com.fengzhuang;
public class Test{
    public static void main(String[] args){
        Car b=new Car();//实例化操作
        b.setName("宝马");//赋值
        b.setColor("红色");
        b.setSize("大型");
        //很明显这些历程看不到若何实现。
        String name=b.getName();//取值
        String color=b.getColor();
        String size=b.getSize();
        //最后输出效果
        System.out.println(name+":"+color+":"+size);
    }
}

输出:
宝马:红色:大型

剖析:由于声名变量的时刻我们已经设置他们几个为私有变量了,以是我们要是还想在接见它的话只有通过set这个确立器才可以举行接见

4.小我私家心得总结

前面已经说了这么写了,那我就最后说一点,总结一下这些吧!

封装的优势在于界说只可以在类内部举行对属性的操作,外部无法对这些属性指手画脚,要想修改,也只能通过你界说的封装方式;
继续减少了代码的冗余,省略了许多重复代码,开发者可以从父类底层界说所有子类必须有的属性和方式,以到达耦合的目的;
多态实现了方式的个性化,差别的子类凭据详细状态可以实现差别的方式,光有父类界说的方式不够天真,遇见特殊状态就左支右绌了

这些是我对这些的明了,希望可以对人人有所辅助。——总而言之,这块真的是非常重要的,就是java语言的跟呀!人人一定要好好的明了,多琢磨琢磨,多写写代码,多思索,自然就不难了,就好比"会了不难,难了不会"这个原理是一样的,写这篇文章一方面是为了纪录一下子知识点,另一方面也是希望可以辅助那些对这些观点,和代码的运用一知半解的朋友们,原创这篇文章真的很不容易写了很久,希望人人可以多多支持,要是有不懂的可以私信我或者在地下谈论,看到了之后我会尽我所能为人人解答的,人人一起学习。(另外明后天我还会陆续连载一些原创文章的要是以为我写的对你们有辅助的话,可以关注我一下子,利便查找 )

大 家 多 多 支 持 ! ! !

,

阳光在线官网

阳光在线官网(原诚信在线官网)现已开放阳光在线手机版、阳光在线电脑客户端下载。阳光在线娱乐戏公平、公开、公正,用实力赢取信誉。

Sunbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:中国驰名商标:java 的 四 个 基 本 特 性 ——封装 继续 多态 抽象

网友评论

  • (*)

最新评论

  • 正网足球平台出租 2020-05-25 01:41:01 回复

    www.66rfd.com(www.jiahekuangye.com)是Sunbet 申博的官方网站。www.66rfd.com提供申博开户(sunbet开户)、SunbetAPP下载、Sunbet代理合作等业务。发现了新大陆,好棒!

    1
    • 环球UGAPP下载 2020-08-11 22:17:31 回复

      @正网足球平台出租 联博开奖网www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。我也觉得很精彩呀

文章归档

站点信息

  • 文章总数:794
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1433
  • 评论总数:425
  • 浏览总数:34829