继承、封装和多态的总结

面向对象的三大特征:封装、继承和多态。(抽象)

一、封装

隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性,可维护性。

程序设计要求:高内聚,低耦合。

高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉。

低耦合:仅暴露少量的方法给外部调用。

成员访问权限:

1、public公共的:可以北项目中的所有类访问。(项目可见性)

2、protected受保护的:可以被这个类本身访问;同一个包中的所有其他类访问;被他的子类(同一个包,以及不同包中的子类)访问。(子父类可见性)

3、default/friendly默认的:被这个类本身访问;被同一个包中的类访问。(包可见性)

4、private私有的:只能被这个类访问。(类可见性)

类访问权限

类的属性处理:1、一般使用private。(除非本属性确定会让子类继承)。

2、提供相应的set/get方法来访问相关属性。这些方法通常是public,从而提供对属性的读取操作。(注意:boolean变量get的方法是用is开头!)

3、一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public

二、继承extends

继承的作用:类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模;提高代码的复用性!

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

2java重的多继承,可以通过接口来实现。

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

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("小动物吃奶!");
	}
}

三、多态

多态:多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序最终状态只有在执行过程中才被决定而非在编译器件就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。

多态包含:重写:在子、父类之间,子类的方法名、返回值和参数列表同父类一样,但方法体却不同。

重载:在同一个类中,方法名相同,方法的参数类型不同(类型、顺序和个数)。

多态存在的3个必要条件:

要有继承;要有方法重写;父类引用指向子类对象。

class Animal {
	int age=10;	
	public void shout(){
	   System.out.println("叫了一声!");
	}
}
class Dog extends Animal {
	int age=28;	
	public void shout() {
	   System.out.println("旺旺旺!");
	}
	
	public void gnawBone(){
	   System.out.println(“我在啃骨头");
	}
	
}
class Cat extends Animal {
	int age=18;
	public void shout() {
	System.out.println("喵喵喵喵!");
	}
}
package object;
public class TestPolym {

public static void main(String[] args) {
	Animal animal = new Dog();  //向上可以自动转型

	System.out.println(animal.age);   //属性调用时,仍然是基类的属性。属性没有多态!
//	animal.shout();
		
	animalCry(new Dog()); 
	//传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。
	//如果没有多态,我们这里需要写很多重载的方法。如果增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。
	
              //有了多态,只需要增加这个类继承Animal基类就可以了。
	animalCry(new Cat());
		
	Dog dog = (Dog) animal;  //编写程序时,如果想调用运行时类型的方法,只能进行类型转换。不然通不过编译器的检查。
	dog.gnawBone();
			System.out.println(dog instanceof Animal); 
	System.out.println(animal instanceof Cat);
	System.out.println(animal instanceof Dog); 
		
	}

	
	static void animalCry(Animal a){
		a.shout();
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET) { timeout++; if (timeout > 1000000) return -1; } data[2] = SPI_I2S_ReceiveData(SPIx); SPI继承封装多态是面向对象程序设计中的三个重要概念。 继承是指一个类x_CS_SET; return ((data[1] << 8) | data[2]) & 0x03FF; } void LCD_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |可以继承另一个类的特性,包括属性和方法,被继承的类称为父类或基类, RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,继承的类称为子类或派生类。子类可以重写父类的方法,也可以添加自己的 ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed =方法和属性,从而实现代码的复用和扩展。 封装是指将数据和方法封装到一个类 GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); 中,并且对外部隐藏类的实现细节,只暴露必要的接口给外部使用。这样 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_6可以提高代码的安全性和可维护性,同时也方便了代码的使用和调用。 多态是 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStructure指同一种行为或方法在不同的对象上具有不同的表现形式,即同一操作作.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure用于不同的对象上面,可以产生不同的执行结果。多态可以提高代码的灵活性和); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO可扩展性,也是面向对象编程的重要特性之一。 继承封装多态是_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |面向对象编程的基础,它们的实现可以让程序更加高效、简洁、易于维护和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值