`
zisefeiniao
  • 浏览: 172111 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

天啊,MLDN中心真让我懂得什么叫学习了.坚持,为了高薪

阅读更多
今天所讲的知识点
A 面向对象的第二特点:继承
B 子类:(实例化过程、覆写父类的方法、覆写父类的属性)
C final关键字
D 抽象类(abstract)和抽象方法
E 接口(interface)
F 面向对象的第三特点:多态性
G instanceof关键字
H Object类
I super关键字和this关键字的区别




我对知识点的分析

A 一、继承的概念
首先,回忆一下,面向对象的第一个特征是封装,即把一个类的属性和部分方法进行私有化,即封装保护起来。
当一个类的属性方法只是需要在另一个类的基础上进行扩展设计即可的时候就可以采用继承的手法,这样被继承的类叫父类或者叫做超类,而继承别人的类叫做子类或者派生类。

二、继承的特点
1、在JAVA中的继承和生活中的继承的区别在于,在JAVA中的继承是在原有基础上扩展,即没有“败家子”;
2、在java中所有的继承只是子类继承了父类中的公共操作。
更具体的来讲,是直接继承了所有的操作,只是非私有的操作是直接继承的,而私有的操作是隐含继承的(隐含继承是指通过间接的方式继承私有属性和操作,例如私有属性的继承通过继承的setter和getter方法间接访问私有属性)。
3、关于类的继承有一个限制:一个子类只能继承自一个父类,所以在Java中不支持多重继承
4、但是在Java中允许多层继承,即:一个子类可以有一个父类,一个父类还可以有其自己的父类。
5、能采用“super.”使用父类的方法、属性的尽量使用,而不要采用完全重写相同的代码

三、子类继承父类的格式
class 子类 extends 父类{}


B 一、子类的实例化过程
一个继承的子类进行实例化操作的时候,首先会先让其父类进行实例化操作,然后进行自己的实例化操作。
说明:
(1)在进行子类对象的实例化之前首先会默认调用父类中的无参构造方法,为父类中的属性进行初始化操作,之后再调用子类自己的构造方法完成子类的初始化操作;
(2)当然在子类的构造方法中可以用过super关键字指明需要调用的是那个构造方法;
(3)如果要用“super(【参数】);”语句调用父类的构造方法时,必须放在该构造方法的首行;
(4)如果没有写任何的super语句,则在子类的构造方法中的第一行默认隐含了一个“super();”
(5)如果父类没有无参构造函数(即所有构造函数都显式定义为有参的),那么在子类的构造方法中必须用“super(参数);”显式的调用父类的某个构造方法;

二、方法的覆写
在子类中声明了与父类中同名且参数个数及参数类型一致的方法,称为方法的覆写。
注意:
(1)在进行方法的覆写时必须注意被覆写的方法不能拥有比父类更严格的访问权限。
访问权限严格的关系:public > default(默认) > private
(2)必须记住的一个原则:“在使用子类对象操作的时候,调用的方法永远是被子类覆写过的方法。”
(3)如果想在子类中调用被覆写的父类的方法,则需要用“super.方法()”;
(4)如果想要覆写父类中的私有方法,那么在子类中对该方法覆写后,必须连同调用该私有方法的其他方法也一起覆写,这样的覆写才起到作用。(这点结论的分析见问题及分析解决方法A)
(5)覆写的方法必须与父类的方法返回值类型一致,否则会报错
例如:
ReWriteMethod.java:27: print() in B cannot override print() in A; attempting to
use incompatible return type
found   : java.lang.String
required: void
        public String print(){          //(aa:)
                      ^
1 error

在此需要区分方法的覆写与方法的重载的概念:
方法的重载及覆写的比较
No. 比较点 重载 覆写
1 定义 方法名称相同,参数的类型或个数不同 方法名称、参数的类型和个数完全相同
2 注意点 ----- 访问权限不能更加严格
  与返回值无关 返回值必须一致
3 范围 发生在一个类中 发生在继承关系中


三、属性的覆写(了解)
在子类中声明了与父类中同名但数据类型不一致的属性,称为属性的覆写。

C 在Java中可以使用final关键字完成以下的操作:
• 使用final关键字声明一个类,这个类不能有子类,即“不能有下一代的类”
• 使用final关键字声明一个方法,这个方法不能被子类覆写,即“不可替代的方法”
• 使用final关键字声明一个常量,常量即表示不可修改
例如:
final class A{
};
class B extends A{
};
报错信息:
ReWriteMethod.java:24: cannot inherit from final A
class B extends A{
                ^
1 error
-----------------------------------------------------------------------------------------------------------
class A{
public final void fun(){}
};
class B extends A{
public void fun(){} // 不能被覆写
};
报错信息:
ReWriteMethod.java:26: fun() in B cannot override fun() in A; overridden method
is final
        public void fun(){}     // 不能被覆写
                    ^
1 error
--------------------------------------------------------------------------------------------
class A{
public final String INFO = "MLDN" ;
public void fun(){
  INFO = "world" ;
  System.out.println(INFO) ;
}
};
报错:
ReWriteMethod.java:25: cannot assign a value to final variable INFO
                INFO = "world" ;
                ^
1 error
关于常量的补充提示:
1、 常量的命名规则是全部字母大写:INFO
2、 使用public static final声明的常量称为全局常量。public static final String INFO = "MLDN" ;
D 抽象类(abstract)和抽象方法
一、概念
用abstract关键字声明的类为抽象类。
在抽象类或者接口中只声明而未实现的方法称为抽象方法,在抽象类中抽象方法必须使用abstract关键字声明,而在接口中可以省略,因为接口中的方法只能是抽象方法。
二、特点
1、抽象类不能直接实例化
2、一个抽象类必须被子类所继承,且被继承的子类(如果不是抽象类)则必须覆写抽象类中的全部抽象方法
3、抽象类不能使用final关键字修饰,因为用final声明的类不能被继承,而抽象类确必须被继承;
4、虽然抽象类不能直接被实例化,但抽象类可以有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的构造方法(默认是无参的),之后再调用子类自己的构造方法,如果要想调用抽象类中有参的构造方法必须在子类的构造方法的第一行使用“super.(参数)”来调用。所以抽象类的对象是通过子类间接实例化的。
三、总结
1、抽象类就是普通类的一个扩展,只是实例化被受到了限制,然后在普通类的基础之上加上了抽象方法而已,除此之外与普通类是完全一致的。
2、抽象类完成的是一个模板的功能。

四、抽象类和抽象方法的定义方法
抽象类的定义方法即在class的前面加上abstract关键字
抽象方法的定义方法即在返回值类型前面加上abstract关键字,并且只是声明方法,没有具体的实现语句,即无方法的“{}”实现部分

E 接口(interface)
一、概念
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么就可以将这个类定义成一个接口。
接口的定义格式:
interface 接口名称{
全局常量 ;  //public static final 数据类型 全局常量名;
抽象方法 ;  //public abstract 返回值类型  方法名(【参数列表】);
}
例如:
二、特点
(1)接口中的所有方法的访问权限都是public;
(2)接口本身都是由全局常量和抽象方法组成,所以在属性的声明部分可以省略“public static final”关键字的修饰,而抽象方法的声明部分可以省略“public  abstract”关键字,而一般习惯上都只省略“abstract”;
(3)接口必须通过子类才能实现,而一个子类可以同时继承多个接口,子类继承接口采用如下的语法格式:            class 子类 implements 父接口1,父接口2….;
那么子类需要实现继承的所有接口的抽象方法
(4)一个抽象类可以继承一个或者多个接口,而一个接口不能继承一个抽象类;
(5)如果一个类即要实现接口,又要继承抽象类的话,则按照以下的格式编写即可:
class 子类 extends 父类 implements 父接口1,父接口2,…{}
那么此时,就要求此子类实现抽象类及全部接口的抽象方法
(6)一个接口可以继承一个或者多个接口,那么此时,就要求此接口的子类要实现全部接口的抽象方法
(7)接口的主要作用在于定义标准。
F 面向对象的第三特点:多态性
对象多态性分为两种:一种属于方法的重载与覆写,另外一种就是对象多态性。
对象多态性,是从子类和父类对象类型的相互转换而来的:
• 向上转型:将子类实例变为父类实例
|- 格式:父类 父类对象 = 子类实例 ; 自动完成
|- 以基本数据类型操作为例:int i = 'c' ;  因为c的容量比int小,所以可以自动完成
|- 向上转型可以自动完成,完成之后调用的方法是被子类覆写过的方法。
• 向下转型:将父类实例变为子类实例
|- 格式:子类 子类对象 = (子类)父类实例 ; 强制完成
  |- 以基本数据类型操作为例:char c = (char)98 ;  因为整型的容量比char大,所以强制完成
注意:在相互转型的时候,一定要注意类型的匹配,否则会报ClassCastException: A cannot be cast to B的异常,即两个没有任何关系的对象是不能进行相互的转型操作;
如果一个对象要想进行向下转型之前,必须之前发生过向上转型操作。只有这样才能建立关系。

G instanceof关键字
如果要想判断某个对象是否是指定类的实例,则可以使用instanceof关键字完成。
判断的语法格式如下:
实例化对象 instanceof 类  此操作返回boolean类型的数据
H Object类
Object类是所有类的父类,如果一个类没有明确的继承某一个具体的类,则将默认继承Object类。
Object类中的三个重要方法:
• 得到对象信息:public String toString()
• 进行对象比较:public boolean equals(Object obj)
• 得到对象的hash码:public int hashCode()
1、在对象打印的时候将默认调用toString()方法,但是这样调用toString()方法的返回信息并不明确,如果希望返回一个具体类的信息,则必须在子类中覆写toString()方法。
2、如果一个类需要进行对象比较,那么就可以覆写equals()方法
3、使用Object可以接收任意的引用数据类型
4、可变参数中如果使用了Object作为类型,则任何类型都可以接收
I super关键字和this关键字的区别
this与super的比较
No. 比较点 this super
1 属性 调用本类中的属性,如果本类中没有此属性,将从父类中继续查找 直接表示调用的属性是父类中的属性
2 方法 调用本类中的方法 调用父类中的方法,一般在方法被覆写之后
3 构造 调用本类中的其他构造方法 调用父类中的其他构造方法
4 使用 必须放在构造方法的首行 必须放在子类构造方法的首行
  this和super无法同时出现,但是在类中至少有一个构造方法是没有使用this()调用的,那么这个构造方法一般都会去使用super调用父类中的构造方法
5 特殊点 表示当前对象 无此概念

J
今天的问题
A
解决方法:
一一验证
//1、父类中的方法为默认的,子类中的覆写方法是默认的或public,都能覆写成功




//2、父类中的方法为私有的,子类中的覆写方法是默认的或public或private,都不能覆写成功





//3、父类中的方法为私有的,子类中的覆写方法是私有的,
//但是覆写访问父类中的这个私有方法的方法,可以使得私有方法的覆写起作用

问题描述:
思考?
如果在父类中使用private关键字修饰了一个方法,子类中使用default或者public修饰方法,那么此方法是否称为覆写呢?

B class A{
public void print(){
  System.out.println("父类中的方法");
}
}
class B extends A{
public String print(){        
  return "子类中的方法";
}
}

解决方法:方法覆写,返回值类型必须一致
报错:ReWriteMethod.java:27: print() in B cannot override print() in A; attempting to
use incompatible return type
found   : java.lang.String
required: void
        public String print(){          //(aa:)
                      ^
1 error




今天再次看了mldn的课程介绍的时候,忽然对后面即将要学习那么多那么多的知识产生了害怕的心理,开始怀疑自己能不能学好?
我知道自己的学习弱点在于没有超强的毅力,所以这次连续高强度的4个月的学习是对我的极大挑战。
希望自己能坚持!!
坚持4个月,一切都会好转的!!

分享到:
评论

相关推荐

    MLDN魔乐JAVAWEB课堂19_Smartupload.swf19_Smartupload.swf

    MLDN魔乐JAVAWEB课堂19_Smartupload.swf 笔记 后面还有MLDN魔乐JAVAWEB课堂14_WEB安全实现及config对象;MLDN魔乐JAVAWEB课堂26_MVC设计模式;MLDN魔乐JAVAWEB课堂21_DAO设计模式.swf;MLDN魔乐JAVAWEB课堂25_...

    MLDN李兴华JAVAWEB视频教程(30集)

    资源名称:MLDN李兴华JAVA WEB视频教程(30集)资源目录:【】MLDN软件实训练中心—JAVA.WEB教程.19_使用JSP.DAO完成用户登陆【】MLDN软件实训练中心—JAVA.WEB教程.1_Tomcat服务器配置【】MLDN软件实训练中心—JAVA...

    MLDN李兴华视频教程代码.rar

    【标题】"MLDN李兴华视频教程代码.rar"是一个包含与机器学习和深度学习相关的编程实践材料的压缩文件,由知名讲师李兴华教授。这个教程可能涵盖了从基础概念到高级技术的全面讲解,旨在帮助学员深入理解并掌握机器...

    MLDN李兴华视频教程学习笔记j2ee web.rar

    《MLDN李兴华视频教程学习笔记》是针对J2EE Web开发的一份详细学习资料,结合了李兴华老师的教学视频,旨在帮助学习者深入理解J2EE平台下的Web应用开发技术。J2EE(Java 2 Platform, Enterprise Edition)是Java语言...

    mldn学习笔记 — 网络编程

    《mldn学习笔记——网络编程》这篇博客主要探讨了计算机网络编程的相关概念和技术,结合提供的文件《215_网络编程.pdf》,我们可以深入学习这一主题。网络编程是IT领域中的核心部分,它涉及到如何通过网络进行数据...

    2011版魔乐MLDN李兴华主讲_1-Oracle简介.rar

    本资源“2011版魔乐MLDN李兴华主讲_1-Oracle简介”旨在为学习者提供Oracle数据库的基础知识和入门指导。主讲人李兴华可能是一位在IT领域,尤其是Oracle技术方面有深厚造诣的专家,通过魔乐MLDN这个平台分享他的经验...

    MLDN_JAVASE_文档

    【MLDN_JAVASE_文档】是一份针对Java SE(标准版)的全面学习资源,由MLDN(可能是指微软学习网络或类似的教育平台)提供。这个文档集合旨在帮助初学者和进阶者掌握Java编程语言的基础知识。Java SE是Java平台的核心...

    MLDN_Oracle学习笔记+源码 李兴华讲解

    《MLDN_Oracle学习笔记+源码 李兴华讲解》是针对Oracle数据库系统的一份详尽学习资源,由知名讲师李兴华精心编撰。这份资料不仅包含了丰富的理论知识,还提供了源代码实例,旨在帮助学习者深入理解和掌握Oracle...

    MLDN JAVA讲座 课程PDF文档

    这套课程旨在帮助没有编程基础的人快速入门JAVA语言,并提供了丰富的实践代码,让学习者能够通过动手操作来加深理解。课程内容涵盖了JAVA的基础知识,进阶特性以及实用技术,为学习者构建坚实的编程基础。 首先,...

    java视频教程-MLDN

    本"java视频教程-MLDN"是由知名讲师李兴华精心制作,旨在为学习者提供一套全面、深入的Java学习资源。李兴华老师以其丰富的教学经验和深厚的编程功底,确保教程内容的专业性和实用性。 在本套教程中,你将学习到:...

    MLDN.rar_mldn

    本资料"MLDN.rar_mldn"深入探讨了这一主题,特别是针对Java类集的使用和理解。让我们一起走进Java类集的世界,探索其核心概念、API以及实际应用。 一、类集框架概述 Java类集框架(Collection Framework)是Java ...

    MLDn学习笔记 —— JDBC

    **JDBC基础与应用** Java Database Connectivity (JDBC) 是Java平台中用于访问数据库的标准Java API,它允许Java程序与各种关系型...通过阅读《220_JDBC.pdf》这份文档,你可以更深入地学习JDBC的细节和高级特性。

    李兴华 我的智囊团项目 代码 MLDN5

    李兴华 我的智囊团项目 代码 MLDN

    《MLDN出品JAVA风暴JAVA学习的终极资料》JAVASE压缩包

    12. **实战项目**:为了帮助学习者巩固理论知识,压缩包可能包含一些小规模的Java SE项目,比如命令行应用程序、简单的桌面应用或游戏,让学习者有机会将所学应用于实践。 通过这份《MLDN出品JAVA风暴JAVA学习的...

    mldn oracle学习笔记

    "mldn oracle学习笔记"是一份关于学习Oracle数据库的资源,很可能包含了从基础到高级的全方位教程,旨在帮助学习者深入理解Oracle数据库的原理和操作技巧。"魔乐"可能是这份笔记的作者或者是一个学习社区的名字,而...

    MLDN魔乐科技_Oracle课堂6.rar

    本资源"MLDN魔乐科技_Oracle课堂6.rar"聚焦于Oracle数据库的学习,特别是关于查询优化与函数应用的部分。通过视频教程"MNDL魔乐科技JAVA培训_Oracle课堂6_排序、单行函数.wmv",我们可以深入理解并掌握Oracle数据库...

    MLDN魔乐科技_Oracle课堂5.rar

    本课程“MLDN魔乐科技_Oracle课堂5”将深入讲解Oracle数据库的相关知识,帮助学习者掌握数据库管理、查询优化、性能调优等核心技能。 在Oracle数据库系统中,数据存储在表空间中,而表空间是由一个或多个数据文件...

    MLDN_J2EE框架_笔记(已解密)

    【标题】"MLDN_J2EE框架_笔记(已解密)"所涵盖的知识点主要集中在J2EE(Java 2 Platform, Enterprise Edition)框架的应用和理解上。这是一份专门针对J2EE技术的详细学习笔记,可能包含了从基础概念到高级应用的各个...

    MLDN魔乐JAVA_12内部类.rar

    "MLDN魔乐JAVA_12内部类.rar"压缩包文件很显然是关于这个主题的学习资源,可能包含了讲解、示例代码和练习,旨在帮助学习者深入理解Java内部类的概念和应用。 内部类主要分为四种类型:成员内部类、局部内部类、...

    MLDN魔乐JAVA_13链表.MLDN魔乐JAVA_13链表.rar

    通过学习"MLDN魔乐JAVA_13链表"这个教程,你将掌握链表的基本原理和Java中的具体实现,能够灵活运用链表解决实际问题。这个教程可能包括了链表的定义、基本操作的示例代码、性能分析以及常见面试题的解答,对于提升...

Global site tag (gtag.js) - Google Analytics