Java基础1:Java面向对象的三大特性+重写和重载

封装、继承、多态

一、面向对象思想

  单独谈面向对象,理解起来并不深刻。在面向对象之前的编程是面向过程的,主要的描述一个具体行为的发展过程,比如回正对洗手这个动作进行编程,某人先涂洗手液,搓洗,清水冲,当我们需要修改某人,或者修改洗手液的品牌就需要修改代码,这要就不符合“对更改封闭,对扩展开放”的原则。所以就发展到面向对象编程。对象可以理解为一个执行者,编程的时候重点是这个对象,例如对象是人,人的性别、年龄、身高是他的属性,他的行为可以洗手、吃饭、逛街等等。这给时候想添加新的行为就可以在对象中扩展一个新的方法,无需更改代码。当我们想换个人的时候就可以把共同属性、行为抽取出来形成一个类,比如人类这个类,具体的人可以继承这个类,自己独特的行为、属性可以扩展。但是继承的耦合性太强,子类与父类的联系太过紧密,这个时候就出现多态。类的某些方法、属性不希望其他类访问,这就需要封装

二、封装

  在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

  个人理解,封装主要是因为Java有访问权限的控制。public > protected > package = default(包访问权限) > private。封装可以保护类中的信息,只提供想要被外界访问的信息。

                                                                                                              

    可以看一下这个博客:https://www.cnblogs.com/jinggod/p/8425423.html

 三、继承

  继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

  1、被private修饰的,是不可以被继承的,因为private修饰的只能在本类中可见,子类是不可见的;另外父类被protected或public修饰的,子类是可以继承的;被默认修饰符修饰的只能在同包下的子类是可以继承的;

  2、构造器是不会被子类继承的,但子类的对象在初始化时会默认调用父类的无参构造器,当父类显示写了有参构造器,且没有无参构造器。子类继承父类的时候必须显示的调用父类的有参构造器。调用的方式可以使用super(a,b)来调用;

  3、子类是不会继承父类被static修饰的方法和变量,但是可以调用。

  4、Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。

四、多态  

  多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

                                                                                                      

  多态性是对象多种表现形式的体现。

public class Test {
    public static void main(String[] args) {
      show(new Cat());  // 以 Cat 对象调用 show 方法
      show(new Dog());  // 以 Dog 对象调用 show 方法
                
      Animal a = new Cat();  // 向上转型  
      a.eat();               // 调用的是 Cat 的 eat
      Cat c = (Cat)a;        // 向下转型  
      c.work();        // 调用的是 Cat 的 work
  }  
            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}


执行以上程序,输出结果为:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠

五、重写和重载。

  重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

  重载是在一个类里面,方法名字相同,而参数不同(数量和类型可以不同)。返回类型可以相同也可以不同

  方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

  • (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
  • (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
  • (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

posted @ 2019-07-12 10:32  悦风旗下  阅读(530)  评论(0编辑  收藏  举报