最强总结:Java三大特性之封装、继承、多态

很多人想了解Java的三大特性,今天它来了!

 

---------------------  三大特性第一弹——封装   -----------------------

 

封装的定义:

一句话概括:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

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

系统的其他对象要访问该类的代码和数据,只能通过接口。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

 

实现封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:


public class Person {
    private String name;
    private int age;
}

以上代码中,将 name 和 age 属性设置为私有,只有本类才能直接访问,其他类都不能直接访问。

2. 对每个属性提供对外的公共访问方法,创建一对赋\取值方法,用于对私有属性的访问,

通常情况下,这些方法被称为getter和setter方法,

任何要访问类中私有成员变量的类都要通过这些getXx和setXx方法。

例如:


public class Person{
    private String name;
    private int age;
​
    public int getAge(){
      return age;
    }
​
    public String getName(){
      return name;
    }
​
    public void setAge(int age){
      this.age = age;
    }
​
    public void setName(String name){
      this.name = name;
    }
}

3.通过setXx和getXx方法对封装的数据进行访问:


public class Test{
   public static void main(String args[]){
      Person p = new Person();
      p.setName("James");
      p.setAge(20);
      
 
      System.out.print("名字 : " + p.getName()+ 
                             "年龄 : "+p.getAge());
    }

 

最后,使用封装有好处:

  • 1.提高了数据的安全性

  • 2. 良好的封装能够减少耦合。

  • 3. 类内部的结构可以自由修改。

  • 4. 可以对成员变量进行更精确的控制(限制某个属性的值的范围,如果赋值时不符合条件就会进行相应的操作)。

  • 5. 隐藏信息的实现细节。

 

 

------------------     三大特性第二弹——继承        ----------------

 

继承的一句话定义:

子类通过extends关键词继承父类的方法跟属性。

 

使用继承的目的:

实现代码的复用!

 

继承的用法:

当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子  类自动拥有了父类的属性和方法。

public  class Pet {//宠物类为父类
    String name;
    int age;
    public  void sleep(){};

}
public class Cat extends Pet{//Cat类通过extends关键字来继承Pet类
    public void sleep(){
        System.out.println("我是猫,我会睡觉");//重写了父类的sleep方法
    }
    public void eat(){//扩展了自己独有的eat方法
        System.out.println("猫吃鱼");
    }
}
public class Dog extends Pet{//Dog类通过extends关键字来继承Pet类
    public void sleep(){
        System.out.println("我是狗,我会睡觉");//重写了父类的sleep方法
    }
    public void eat(){//扩展了自己独有的eat方法
        System.out.println("狗吃骨头");
    }
}

虽然Cat类和Dog类中没有定义name和age属性,但由于继承了Pet类,所以自动拥有了父类的属性。

继承中super和this的用法:

super:代表父类的引用

this:代表当前对象的引用
1.访问成员

        this.成员变量     ----     本类的

        super.成员变量  -----    父类的

        this.成员方法名()    ----  本类的

        super.成员方法名()   -----  父类的

2.访问构造方法

super(属性1,属性2,属性3) --- 调用父类的构造方法

注:如果构造方法中存在super();那么super()必须位于子类构造方法中的第一行,详情见注意事项【8】。

 

Java中只支持单继承,不支持多继承,但是支持多层继承。

 

注意事项:

1.父类的私有属性和方法,以及构造方法不能被子类继承。

2.子类也可以重写写父类的方法,又名覆盖。

3.子类也可以命名与父类同名的成员变量。

4.子类还可以写自己特有的属性和方法,目的是实现功能的扩展。

5.如果有这样的需求:要将父类尽可能地隐藏起来,但是又要允许子类的成员来访问他们,这时候就需要使用到protected关键字来修饰父类的属性和方法。

6.继承是一种强耦合关系。 

7. 继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。

8.子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显式的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。如:

public class Cat extends Pet{
     double weight;//子类独有的属性
    //子类的构造方法
    public Cat(String name, int age, String color, double weight) {
        super(name, age, color);//先显式的调用父类的构造方法,位于第1行
        this.weight = weight;//再完善自己的属性构造
    }

}

9.java中规定,所有的类都是Object类的子类。

 

----------------------   三大特性第三弹——多态   -----------------------

 

关于多态的定义:

一句话概括:同一操作作用于不同的对象,可以产生不同的效果叫多态。

通俗地说,多态就是使用同一种调用形式,当调用的对象不同的时候,所产生的执行结果也不同。

也可以说,多态是指一个对外接口,多种实现方式,即一个接口使用不同实例执行不同的操作。

 

多态的存在有3个条件:

1)要有继承关系

2)要有重写

3)父类引用指向子类对象,即向上转型。

 

常见的实现多态的形式: 

1具体类多态

class Fu{}
class Zi extends Fu{}

Fu f= new Zi()//父类引用指向子类

2抽象类多态(常用)

abstract class Fu{}
class Zi extends Fu{}

Fu f= new Zi();//抽象父类引用指向子类

3接口多态(常用)

interface Fu{}
class Zi implements Fu{}

Fu f= new Zi();//父接口引用指向子类

 

注意:向上转型时,子类单独定义的方法会丢失,父类引用指向子类的对象不能访问子类独有的方法,通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。

 

向下转型:是把父类对象转为子类对象。

        Pet d=new Dog();//父类的引用指向子类的对象,向上转型
        Dog d2= (Dog) d;//强制把父类引用的Dog对象转换成Dog类引用的Dog对象,叫向下转型。

多态的作用:

略说版:

减少重复代码,使代码变得简洁

提高了代码的维护性(继承保证)

提高了代码的扩展性(由多态保证)。

详谈版:

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,

写出通用的代码,做出通用的编程,以适应需求的不断变化。

应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可,大大提高了程序的可复用性。

 

                -------------------------  over  --------------------------

                            关注我,为不断掉头发者点赞!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值