面向对象编程题总结

初谈自己对java面向对象的理解,大牛勿喷。在底部还有一些关于面向对象的一些相关的题目和答案,相关代码我已经上传到git上如果有兴趣的话可以看一下。所有面向对象编程题都是网上搜索,如果侵权请联系本人。

参考资料:

https://www.cnblogs.com/dolphin0520/p/3799052.html

https://www.cnblogs.com/xiaoxi/p/6392154.html

抽象:抽象就是抽取共同性。

基类:在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”。不是抽象类的基类不是好基类

我们来直接说面向对象的三大特征

继承:类的继承实际上就是类的衍生关系,我们上面说的Michael是猫,但具体来说,它是英国短毛猫。英国短毛猫当然也是猫,但是除了猫的基本特征,英国短毛猫有许多属于自己的特点,比如毛短而密,头大脸圆。

封装:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

多态:某种意义上而言,多态是基于封装和继承上建立起的重要概念。如果要详细了解多态的话就需要知道多态的三大特性。

(1)向上转型:抽象类中的方法没有定义行为,以该类作为父类,子类重写方法,便可以实现向上转型实现多态。比如你是一    个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:

      酒 a = 剑南春

      酒 b = 五粮液

      酒 c = 酒鬼酒

      …

      这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,酒是父类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

(2)继承:子类继承父类

(3)重写:子类继承父类,并重写父类方法。

类和对象:类是对于一类对象共有特性得描述,而对象是符合类得一个具体实例。对象得特征符合类中规定得特性,而类描述得方法和实力变量分别可以被对象表达出来,方法和实例变量分别描述了对象得行为和属性。简单来说每个对象都是某个类(class)的一个实例,而你实例出来的就相当于是一个对象(Person chen = new Person ())chen就是对象。比如人作为一个类,共通性就是有年龄,身高,体重,这些可以人的属性。人要睡觉,要吃饭,可以作为方法。而你作为人类中的一员,你就是一个属于人类的对象,也就是实体,真实存在的,有名有姓的

方法重载:就是一个类中,一系列方法的名字相同,但是参数列表不同,我们对于不同的数据类型都可以使用同一个方法,对于不同参数数的情况也可以使用同一个方法,这就大大提高我们对对象的描述能力。简单来说就是方法名字相同,但是方法参数不同。

方法重写:就是在子类里对父类某个方法进行覆盖,当调用时子类对象只会调用子类方法而不会调用父类方法。

static:静态特性:只会在类加载的时候执行一次。静态方法只能调用静态方法

(1)静态变量:static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

(2)静态方法:static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

(3)静态代码块:static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

final:常量

(1)修饰类:当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。

(2)修饰方法:即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。final方法不能被重写但是可以被重载。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)

(3)修饰变量: final成员变量表示常量,只能被赋值一次,赋值后值不再改变。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化。如果final修饰一个引用类型(除了基本的变量类型之外的所有类型,比如数组)时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

接口回调:接口回调其实和向上转型是一样的,所谓回调,就是a调b,b也会调a。比如微信授权登录,我们点击确认之后,显示调微信那边接口,验证通过了,微信那边再调我们的接口,然后我们系统打开登陆后的界面。其中微信调我们的接口也叫回调

git路径http://gitlab.geenk.cn/chenjinming/oop.git

以上就是我在做完面向对象编程题以后遇到的一些问题,根据自己的理解写出来让大家观看,若有不正之处,希望谅解并欢迎批评指正。新建了一个java得交流群,有兴趣得也可以进群交流。434138992

如果大家有其他疑问,可在文章下留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值