面向对象的三大特征

面向对象对于我们来说是抽象的,在这里我说说自己对面向对象的一些基础见解,后期会持续更新,希望给一些刚学习编程的同学一些帮助

继承 inheritance
• 子类 父类
• 子类可以从父类继承属性和方法
• 子类可以提供自己单独的属性和方法

• 封装/隐藏encapsulation
• 对外隐藏某些属性和方法
• 对外公开某些属性和方法

• 多态 polymorphism
• 为了适应需求的多种变化,使代码变得更加通用!

面向过程只有封装性(功能的封装,而没有数据的封装),没有继承和多态

隐藏/封装(encapsulation)

• 为什么需要封装?封装的作用和含义? • 我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰 碰显像管吗? • 我要开车,…. • 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩 展性、可维护性。 • 我们程序设计要追求“高内聚,低耦合”。 • 高内聚 :就是类的内部数据操作细节自己完成,不允许外部干涉; • 低耦合 :仅暴露少量的方法给外部使用。


使用访问控制符,实现封装
• 成员(成员变量或成员方法)访问权限共有四种:
• public 公共的 • 可以被项目中所有的类访问。(项目可见性)
• protected 受保护的
• 可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问
• default/friendly 默认的/友好的(包可见性)
• 被这个类本身访问;被同一个包中的类访问。
• private 私有的 • 只能被这个类本身访问。(类可见性)
• 类的访问权限只有两种
• public 公共的 • 可被同一项目中所有的类访问。 (必须与文件名同名)
• default/friendly 默认的/友好的
• 可被同一个包中的类访问。

• 封装要点:
• 类的属性的处理:
• 一般使用private. (除非本属性确定会让子类继承)
• 提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
• 一些只用于本类的辅助性方法可以用private,
• 希望其他类调用的方法用public

继承

• 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。
• 提高代码的复用性!
• extands的意思是“扩展”。子类是父类的扩展
• 不同的叫法:超类、父类、基类、子类、派生类
在这里插入图片描述

public class TestExtends { public static void main(String[] args) { 
		Mammal m1 = new Mammal(); 
		m1.puru(); m1.eat(); 
	} 
}
class Animal { 

	String eyes="眼睛"; 
	String name="无名";

 public void eat(){
	  System.out.println("动物吃东西!");
  	 } 
   }
   class Mammal extends Animal {
   	 //哺乳
     public void puru(){ 
    	 System.out.println("小动物吃奶!"); 
  	   } 
     }

• 通过继承可以简化类的定义,实现代码的重用

• 子类继承父类的成员变量和成员方法,但不继承父类的构造方法

• java中只有单继承 ,没有像c++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统 难于维护。就像我们现实中,如果你有多个父母亲,那是一个多么混乱的世界啊。多继承,就 是为了实现代码的复用性,却引入了复杂性,使得系统类之间的关系混乱。

• java中的多继承,可以通过接口来实现

• 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

方法的重写(override)

• 在子类中可以根据需要对从基类中继承来的方法进行重写。

• 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。

• 重写方法不能使用比被重写方法更严格的访问权限。(由于多态)

重写(override)举例代码

public class TestOverride {
 	public static void main(String[] args) {
 		 Animal animal = new Animal(); 
		  animal.shout(); 
  Dog dog = new Dog(); dog.shout();
  		 } 
   }
   class Animal{ void shout(){ 
   		System.out.println("发出声音!"); 
  		 }
    }
    class Dog extends Animal {
    	 void shout(){ 
    	 	System.out.println("旺旺旺!"); 
     } 
 }

继承深化

• 父类方法的重写:
• “==”:方法名、形参列表相同。
• “≤≤”:返回值类型和异常类型,子类小于等于父类。
• “≥”:访问权限,子类大于等于父类
• 构造方法调用顺序:
• 根据super的说明,构造方法第一句 总是:super(…)来调用父类对应的构造方法。
• 先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

多态 polymorphism
• 多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展 性。
• java中如何实现多态?使用多态的好处?
• 引用变量的两种类型:
• 编译时类型(模糊一点,一般是一个父类)
• 由声明时的类型决定。
• 运行时类型(运行时,具体是哪个子类就是哪个子类)
• 由实际对应的对象类型决定。
• 多态的存在要有3个必要条件:
• 要有继承,要有方法重写,父类引用指向子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值