黑马程序员--Java基础--面向对象之三大特性

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

面向对象。

面向对象是基于面向过程而言的。
面向过程就是函数,而对象则是将这些函数封装成对象,这就是面向对象。
三大特征:
1.封装。
所谓封装是指将属性或者行为隐藏起来,不需要让外部知道,只需要向外部提供公共访问的方法即可。
好处:将变化隔离,便于使用,提高重用性、安全性。
代码演示:

class Person
{
    String name;//类中的属性。
    int age;//类中的属性。

    //类中的行为(函数)。
    public void sop(){
    System.out.println("Hello Java");
    }
}

2.继承。
是指子类继承父类。
好处:让类与类之间产生了关系。提高了代码的复用性。也是提供了另一个特征多态的前提。

注意:子类中的所有构造函数都会默认调用父类中的空参数构造函数。因为每一个子类构造函数内都有一个隐式语句:super();如果子类中来指定用this调用子类自己的构造函数。那么被调用的构造函数也一样会访问父类中的构造函数。

代码演示:

class Person
{
    String name;//类中的属性。
    int age;//类中的属性。

    //类中的行为(函数)。
    public void sop(){
        System.out.println("Hello Java");
    }
}

class Student implements Person
{
    public void run(){
        System.out.println("Hello World");
    }
}

Java中为什么不支持多继承呢?
因为当同一个类同时继承了多个类时,两个父类中有相同的功能时,那么子类不知道该执行哪一个父类中的功能。但是却保留了这种多继承的机制,进行改良。

Java中虽然不支持多继承,但是支持多重继承。如:A继承B B继承C C继承D。
但是在接口中却支持多继承,因为借口的方法中没有方法体,所以可以多继承。
多重继承的出现就有了继承体系,体系中的顶层类就是通过不断向上抽取得来的,顶层类中定义的是该体系中最共性,最基本的功能。
所以要想了解并使用一个继承体系,就必须先查阅顶层类,知道该体系的最基本的使用方法,使用时就要使用最底层的类,因为要使用该类中的方法,就需要创建子类对象,最底层的类不仅可以使用最顶层的基本功能,还可以使用自己特有的方法,还有就是最顶层有时候是不能创建对象的,有可能有抽象方法。
总结:使用一个继承体系时,查阅顶层,创建底层.

当出现了子父类时,那么类中的成员都有那些特点呢?
1.成员变量。
当子父类中出现了同样的属性时,子类调用该属性时,调用的是子类属性值。如果想要调用父类中的属性值时,就需要一个关键字:super。
this:代表本类类型的对象的引用。
super:代表子类所属的父类中的内存空间的引用。
值得注意的是:一般情况下子父类中是不会出现同名属性的,因为只要是父类中有的属性,子类直接继承过来就可以了。
2.成员函数.
当子父类中出现了一模一样的方法时,子类对象会运行自己的方法,好像父类中的方法被覆盖了一样。这一情况就是函数的另一个特性:覆盖(重写,复写)。
那么什么时候使用覆盖呢?当一个类中的功能需要修改时,就可用覆盖来实现。
3.构造函数。
通过代码可以发现,运行子类的构造函数时,会先运行父类的构造函数。
原因是:在子类的构造函数中第一行都有一句隐式的语句:super();
super()表示父类中的空参数的构造函数。而且调用的是参数相对应的构造函数。
那么为什么子类对象初始化时,会调用父类中的构造函数呢?为什么要将super()写在第一行呢?
因为子类既然继承了父类,就会用到父类中的数据,所以就必须要看父类是如何对自己的数据进行初始化的,所以子类在调用父类的构造函数时,就是子类在实例化的过程。

注意、注意:
1.子类中的所有构造函数都会调用父类中的空参数构造函数,因为每一个子类构造函数内的第一行语句都是super()。
2.如果父类中没有空参数的构造函数,那么在子类的构造函数内就必须通过super语句指定要访问的父类中的哪一个构造函数。
3.如果子类构造函数内用this来指定调用自己的构造函数,那么被调用的子类构造函数同样也一样会访问父类中的构造函数。
那么this()和super()这两个语句可以同时出现在构造函数中吗?
因为这两句都必须是在构造函数中的第一行,所以只能出现一个。
那么this()和super()为什么要定义在第一行呢?
因为构造函数是给对象进行初始化的,既然是初始化那么这个动作是要先完成的。
什么时候使用继承呢?
只有当类与类之间存在所属关系时,才具备了继承的前提。比如说:豹子是猫科中的一员,狼是犬科中的一员。所属关系是:is a .
所以不要仅仅是为了获取其他类中的已有成员而纯粹的去继承。继承后,如果被继承的类中的功能,都可以被该子类所具备,那么继承成立,否则失败,不可以继承。
在子类覆盖父类中的方法时,要注意:
1.必须保证子类的权限大于或等于父类的权限,否则编译失败。
2.要么都是静态,要么都是非静态(静态只能覆盖静态,或者被静态覆盖。).

虽然继承有了种种的好处,但同样存在弊端:打破了封装性。子类继承了父类,那么父类中的功能也是会被继承的,或者复写,但是如果一些功能不想被继承,该怎么办呢?
这时就会用到一个关键字:final。
final关键字的特点:
1.是一个修饰符,可以修饰类,变量,方法。
2.被final修饰的类是一个最终类,不可以被继承。
3.被final修饰的方法是一个最终方法,是不可以被覆盖的。
4.被final修饰的变量是一个常量,只能被赋值一次。
定义final常量时的规范:
所有的字母都要大写,如果由多个单词组成,单词要用_来隔开。

3.多态。
即父类(接口)引用指向了自己的子类。
好处:提高了程序的扩展性。
弊端:访问的局限性。因为父类(接口)的引用指向了子类。但只能访问父类中具备的方法,不可以访问子类中特有的方法。既是前期不能使用后期产生的方法。
多态的前期:1.类与类之间必须有关系。继承或者实现。2.通常会有覆盖操作。

代码演示:

class  Demo
{
        public static void main(String[] args) 
        {
            Person p = new Student();//父类引用指向子类对象。

            p.sop();//只能调用父类中具有的方法。

        }
}
class Person
{
        String name;//类中的属性。
        int age;//类中的属性。

        //类中的行为(函数)。
        public void sop(){
            System.out.println("Hello Java");
        }
}
class Student extends Person
{
        public void run(){
        System.out.println("Hello World");
        }
}
 

总结:面向对象是java最核心的部分,只有明确了什么是面向对象,才能更好的去运用这种思想。
要记住面向对象是一种思想,是面向过程而言的,面向过程则是面向的函数,而面向对象中的对象则是将函数进行封装成对象。

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值