欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > OOP笔记3----面向对象三大特征

OOP笔记3----面向对象三大特征

2024/10/24 6:26:31 来源:https://blog.csdn.net/weixin_70903041/article/details/141132401  浏览:    关键词:OOP笔记3----面向对象三大特征

封装

1. 广义上的封装:定义方法是封装,定义类也是封装
2. 狭义上的封装:将类中属性封装
        --添加private访问权限修饰词,外界就不能直接访问属性了
        --然后提供属性有关的公有的getter/setter方法,用来操作这个被私有化的属性。

封装的目的

一个类中的某些属性,不希望直接暴露给外界,让外界直接进行操作。如果让外界直接对这个属性进行值的设置,有可能不符合逻辑。此时就需要将这个属性封装起来,不让外界直接访问。

单例设计模式

单例模式是一种常用的软件设计模式,属于创建型模式之一。它的目的是确保一个类只有一个实例,并提供一个全局访问点。

单例的饿汉模式

1.提供一个private权限的、静态的、当前类的属性,并在静态代码段中进行实例化。

2.构造方法私有化,杜绝从外界通过new的方式实例化对象的可能性。

3.提供一个public权限的静态方法,获取一个当前类的对象。

public class Person{//设计一个私有的、静态的、当前类的对象private static Person instance;static{instance = new Person();}//构造器私有化private Person(){}public static Person getInstance(){return instance;}
}

单例的懒汉模式

1.提供一个当前类的、静态的、private权限的属性
2.提供一个私有的构造器。避免外界直接调用构造器
3.提供一个公有的,静态的方法,来创建当前类的对象。

public class Student{//私有化的静态变量private static Student instance;//私有化构造器private Student(){}public static Student getInstance(){if(instance == null;instance = new Student();}return instance;}
}

继承

是面向对象最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

已有的类,叫父类;派生出来的新类,叫子类。

语法:

修饰词  class  子类名  extends  父类名{

        //子类的类体

}

继承的特点

1、Java只支持单继承,即一个类只能有一个父类;但是一个父类可以有多个子类。

2 、java支持多重继承,即一个类在继承自一个父类的同时,还可以被其他类继承。 可见继承具有传递性

3、子类继承了父类的所有成员变量和方法,包括私有的(只不过没有访问权限),当然也包括静态成员。

4、子类不会继承父类的构造方法,只能调用父类里的构造方法,并且一定至少有一个子类构造器调用了父类的构造器。

5 、子类在拥有父类的成员的基础上,还可以添加新成员。

继承中的构造器

1.默认调用的是父类中的无参构造器。如果父类中没有无参构造器,那么子类需要显示调用父类中的某一个有参构造器。

2.在子类的构造方法中,使用super(有参传参)调用父类中存在的构造方法,而且super(有参传参)必须放在首行首句的位置上。因此可知,super(有参传参)和this(有参传参)不能在一个构造器中共存。

继承中的方法重写

在子类中,对从父类继承到的方法进行重新的实现。 这个过程中,子类重写该方法,会覆盖掉继承自父类中的实现方法。

目的:

因为父类的方法逻辑不能满足子类的需求了,因此子类需要修改逻辑,即重写。

特点:
1.子类只能重写父类中存在的方法。
2.重写时,子类中的方法名和参数要与父类保持一致。
3.返回值类型:必须和父类方法的返回值类型相同,或者是其子类型。
4.访问权限:子类重写方法的访问权限必须大于等于父类方法的访问权限。

多态

多态:就是多种形态,多种状态的含义,在这里,指的是一个对象具有多种形态的特点。就是一个对象可以从一种类型转换为另外一种类型。有向上转型和向下转型两种形式

向上造型

1.父类型的变量引用子类型的对象;

2.向上转型肯定会成功,是一个隐式转换;

3.向上转型后的对象,将只能访问父类中的成员(编译期间,看变量类型);

4.如果调用的是重写过的方法,那么调用的一定是重写方法(运行期间,看对象);

5.在定义方法时,形式参数是父类型的变量。这样更加灵活,可以传任意子类型的对象

格式:

父类型   变量 =  new  子类型();

public class AnimalTest{public static void main(String[] args){Animal a = new Cat("白色",3);//调用方法a.noise();test1(a);}public static void test1(Animal animal){animal.noise();}
}

向下转型

1.父类型变量赋值给子类型的变量,需要强制转换,是一个显示转换;

2.可能会失败,失败的话,会报造型异常;

3.为了避免异常,可以使用instanceof来判断:变量指向的对象是否属于某一个类型;

4.目的:前提是父类型的变量引用子类型的对象。但是父类型的变量调用不了子类里独有的功能,已经不能满足需求。

格式:

子类型   变量名 = (子类型)父类型变量

public class AnimalTest2{public static void main(String[] args){Animal an = new Dog("黄色",8);an.noise();//调用一下对象的独有功能//编译期间看变量类型,没有该方法,只有向下转型Dog d = (Dog) an;d.LookHouse();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com