- 浏览: 1148770 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- Java Foundation (41)
- AI/机器学习/数据挖掘/模式识别/自然语言处理/信息检索 (2)
- 云计算/NoSQL/数据分析 (11)
- Linux (13)
- Open Source (12)
- J2EE (52)
- Data Structures (4)
- other (10)
- Dev Error (41)
- Ajax/JS/JSP/HTML5 (47)
- Oracle (68)
- FLEX (19)
- Tools (19)
- 设计模式 (4)
- Database (12)
- SQL Server (9)
- 例子程序 (4)
- mysql (2)
- Web Services (4)
- 面试 (8)
- 嵌入式/移动开发 (18)
- 软件工程/UML (15)
- C/C++ (7)
- 架构Architecture/分布式Distributed (1)
最新评论
-
a535114641:
LZ你好, 用了这个方法后子页面里的JS方法就全不能用了呀
页面局部刷新的两种方式:form+iframe 和 ajax -
di1984HIT:
学习了,真不错,做个记号啊
Machine Learning -
赵师傅临死前:
我一台老机器,myeclipse9 + FB3.5 可以正常使 ...
myeclipse 10 安装 flash builder 4.6 -
Wu_Jiang:
触发时间在将来的某个时间 但是第一次触发的时间超出了失效时间, ...
Based on configured schedule, the given trigger will never fire. -
cylove007:
找了好久,顶你
Editable Select 可编辑select
类:一类对象的模板
对象:类的一个具体实例
面向对象的三个基本特征是:封装、继承、多态。
继承:
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.
Java是单继承的。除了Object类外,每个类有且只有一个基类。没有明确(explicit)指定基类的类(定义时没有extends),其基类被隐式地(implicitly)指定为Object类。
所以,如果Father implicitly extends Object,Son extends Father,我们不能说Object是Son的基类。但因为继承是Object为根的树状层级关系,Son类“间接继承”了Object类的members。
多态:
定义
多态存在的三个必要条件:
重写与重载
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8.3
http://docs.oracle.com/javase/tutorial/java/IandI/override.html
关于重写override:
在子类中可以根据需要对从基类中继承来的方法进行重写。
1 子类中重写方法必须和父类中被重写方法具有一样的方法签名(相同的方法名称、参数列表(参数数量一致,对应位置参数类型完全一样))。
2 子类中重写方法的返回类型必须是父类被重写方法的返回类型或其子类型。
3 The overriding method must NOT throw checked exceptions that are new or broader than those declared by the overridden method. For example, a method that declares a FileNotFoundException cannot be overridden by a method that declares a SQLException, Exception, or any other non-runtime exception unless it's a subclass of FileNotFoundException.
4 重写方法不能使用比被重写方法更严格的访问修饰符;private 方法不能被重写。
6 子类不能用 静态方法 重写父类的非静态方法(或者这样表述:子类不可以定义这样的静态方法:1 和父类中方法名相同且参数相同;2 父类中的该方法为非静态的),否则会报“the static method cannot hide instance method from ParentClassXXX”
7 子类不能用 非静态方法 重写父类的静态方法(或者这样表述:子类不可以定义这样的非静态方法:1 和父类中方法名相同且参数相同;2 父类中的该方法为静态的),否则会报“This instance method cannot override the static method from First ParentClassXXX”
8 你可以在父类和子类中都定义方法名、参数、返回值均相同的静态方法,但严格的说这不是重写!因为重写体现的是父类对象与子类对象间的多态性;而这个所谓“重写静态方法”,并不会体现出多态性,因为静态方法是类级的;调用的是父类对象的静态方法(当然,并不推荐通过类实例去调类的静态方法),执行的就是父类里的;调用的是子类对象的静态方法,执行的就是子类里的!
Why static method can't be overridden in Java ?
http://en.allexperts.com/q/Java-1046/Static-method-override.htm
关于重载Overloade:
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
http://www.java-samples.com/showtutorial.php?tutorialid=284
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。
方法的名称及其参数类型构成方法的签名,如下面是calculateAnswer方法的签名:
calculateAnswer(double, int, double, double)
Java是通过方法的签名来区分方法的,这正是重载的理论基础。这里需要注意的是,方法签名是不包含返回值类型的,所以你不可以在代码中声明方法签名一样,只是返回值不同的两个方法,否则编译报错,因为JVM不知道该去调哪个。当然,返回值类型只是不能用来作为方法重载的评判标准,并不是说重载方法就必须具有相同的返回值类型!如下面的也是重载:
接口中的成员变量默认是public static final的,即使这三个修饰符你都不加;因为默认是final的原因,所以必须对其进行显式的赋值(http://wuaner.iteye.com/admin/blogs/994819)。
接口和抽象类都是不能实例化的。
如果一个类里包含至少一个抽象方法,这个类必须声明为抽象类
反之不然:抽象类不一定包含抽象的方法,可以全都是具体的方法。
对象:类的一个具体实例
面向对象的三个基本特征是:封装、继承、多态。
继承:
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.
Java是单继承的。除了Object类外,每个类有且只有一个基类。没有明确(explicit)指定基类的类(定义时没有extends),其基类被隐式地(implicitly)指定为Object类。
所以,如果Father implicitly extends Object,Son extends Father,我们不能说Object是Son的基类。但因为继承是Object为根的树状层级关系,Son类“间接继承”了Object类的members。
多态:
定义
引用
多态(动态绑定/运行时绑定/后期)是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法”。
多态存在的三个必要条件:
引用
1 要有继承
2 要有重写
3 父类引用指向子类对象
注意多态定义中的方法二字!只有类的方法有多态,类的成员变量不存在多态!如下面的例子:2 要有重写
3 父类引用指向子类对象
public class AttributeNoPolymorphism { public static void main(String[] args) { Animal a = new Cat(); //下俩输出说明成员变量不存在多态 System.out.println(a.i); //10 System.out.println(a.si);//100 (Dont access the static fields in this way) //正确的对成员变量的访问是是通过get方法(子类重写了父类的getI()方法) System.out.println(a.getI()); //20,这几个sysout中唯一正确的多态体现 //getSi()方法不是重写(static方法无重写这一说!),所以不存在多态 System.out.println(a.getSi()); //100 (Dont access the static methods in this way) } } class Animal { int i =10; static int si = 100; public int getI() { return i; } public static int getSi() { return si; } } class Cat extends Animal { int i = 20; static int si = 200; public int getI() { return i; } public static int getSi() { return si; } }
重写与重载
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8.3
http://docs.oracle.com/javase/tutorial/java/IandI/override.html
关于重写override:
在子类中可以根据需要对从基类中继承来的方法进行重写。
1 子类中重写方法必须和父类中被重写方法具有一样的方法签名(相同的方法名称、参数列表(参数数量一致,对应位置参数类型完全一样))。
2 子类中重写方法的返回类型必须是父类被重写方法的返回类型或其子类型。
3 The overriding method must NOT throw checked exceptions that are new or broader than those declared by the overridden method. For example, a method that declares a FileNotFoundException cannot be overridden by a method that declares a SQLException, Exception, or any other non-runtime exception unless it's a subclass of FileNotFoundException.
4 重写方法不能使用比被重写方法更严格的访问修饰符;private 方法不能被重写。
引用
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8.3
Note that a private method cannot be hidden or overridden in the technical sense of those terms. This means that a subclass can declare a method with the same signature as a private method in one of its superclasses, and there is no requirement that the return type or throws clause of such a method bear any relationship to those of the private method in the superclass.
5 构造方法不能被继承,因此不能重写。
Note that a private method cannot be hidden or overridden in the technical sense of those terms. This means that a subclass can declare a method with the same signature as a private method in one of its superclasses, and there is no requirement that the return type or throws clause of such a method bear any relationship to those of the private method in the superclass.
6 子类不能用 静态方法 重写父类的非静态方法(或者这样表述:子类不可以定义这样的静态方法:1 和父类中方法名相同且参数相同;2 父类中的该方法为非静态的),否则会报“the static method cannot hide instance method from ParentClassXXX”
7 子类不能用 非静态方法 重写父类的静态方法(或者这样表述:子类不可以定义这样的非静态方法:1 和父类中方法名相同且参数相同;2 父类中的该方法为静态的),否则会报“This instance method cannot override the static method from First ParentClassXXX”
8 你可以在父类和子类中都定义方法名、参数、返回值均相同的静态方法,但严格的说这不是重写!因为重写体现的是父类对象与子类对象间的多态性;而这个所谓“重写静态方法”,并不会体现出多态性,因为静态方法是类级的;调用的是父类对象的静态方法(当然,并不推荐通过类实例去调类的静态方法),执行的就是父类里的;调用的是子类对象的静态方法,执行的就是子类里的!
Why static method can't be overridden in Java ?
http://en.allexperts.com/q/Java-1046/Static-method-override.htm
引用
Static means one per class, not one for each object no matter how many instance of a class might exist.
This means that you can use them without creating an instance of a class.Static methods are implicitly final, because overriding is done based on the type of the object, and static methods are attached to a class, not an object.
A static method in a superclass can be shadowed by another static method in a subclass, as long as the original method was not declared final. However, you can't override a static method with a nonstatic method. In other words, you can't change a static method into an instance method in a subclass.
This means that you can use them without creating an instance of a class.Static methods are implicitly final, because overriding is done based on the type of the object, and static methods are attached to a class, not an object.
A static method in a superclass can be shadowed by another static method in a subclass, as long as the original method was not declared final. However, you can't override a static method with a nonstatic method. In other words, you can't change a static method into an instance method in a subclass.
import java.util.AbstractMap; import java.util.HashMap; public class OverrideTest { public static void main(String[] args) { Son son = new Son(); Father father = son; son.aMethod(null); father.aMethod(null); } } class Father { protected AbstractMap aMethod(AbstractMap param) { System.out.println("Father"); return null; } } class Son extends Father { /*** * 访问修饰符:子类的重写方法不能比被重写方法更严格。如这里可以是protected和public,但不能是private和无访问修饰符。 * 返回类型:子类重写方法的返回类型必须是父类被重写方法的返回类型或其子类型。如这里就是被重写方法返回类型AbstractMap的子类型HashMap * 方法名:重写肯定需要相同 * 参数列表:必须严格相同:参数数量一致,对应位置参数类型完全一样!如这里被重写方法的参数为AbstractMap类型,则重写方法的参数也必须是AbstractMap类型!既不能更宽泛(如Object)也不能更严格(如HashMap) * */ @Override public HashMap aMethod(AbstractMap param) { System.out.println("Son"); return null; } }
关于重载Overloade:
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
http://www.java-samples.com/showtutorial.php?tutorialid=284
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。
方法的名称及其参数类型构成方法的签名,如下面是calculateAnswer方法的签名:
calculateAnswer(double, int, double, double)
Java是通过方法的签名来区分方法的,这正是重载的理论基础。这里需要注意的是,方法签名是不包含返回值类型的,所以你不可以在代码中声明方法签名一样,只是返回值不同的两个方法,否则编译报错,因为JVM不知道该去调哪个。当然,返回值类型只是不能用来作为方法重载的评判标准,并不是说重载方法就必须具有相同的返回值类型!如下面的也是重载:
public String m(String s) { return s; } public double m(int i) { return i; }另外需要注意的是,父类方法也是可以重载的。如:
//Object类里的equals()方法: public boolean equals(Object obj) { return (this == obj); } //在自己写的类里这样写不是对Object equals的重写,而是重载,因为你更改了参数类型 public boolean equals(String obj) { return true; }
接口中的成员变量默认是public static final的,即使这三个修饰符你都不加;因为默认是final的原因,所以必须对其进行显式的赋值(http://wuaner.iteye.com/admin/blogs/994819)。
接口和抽象类都是不能实例化的。
如果一个类里包含至少一个抽象方法,这个类必须声明为抽象类
反之不然:抽象类不一定包含抽象的方法,可以全都是具体的方法。
发表评论
-
J2SE Evolution
2013-04-11 15:39 1186Java 7 New Features Java SE 7 ... -
未完 Java: IO & NIO(new I/O)
2013-01-11 20:56 2056适用: event and data-driven apps ... -
未完 java设计: naming convention | 命名规范
2012-11-20 16:45 2131应该遵循的规范: 类/接口/属性名,使用名词或形容词 ... -
未完 Java: enum 枚举
2012-11-19 20:29 1821http://stackoverflow.com/que ... -
Java多线程之 concurrent 并发包
2012-11-01 07:47 2025Java Tutorials -> Concur ... -
未完 Java Tips & Tricks & Notes
2012-09-12 10:00 1131Hidden Features of Java: h ... -
未完 Java Socket
2012-09-12 08:42 1018Java SocketJava SocketJava Sock ... -
Java For-each Loop & Iterable | 增强型For循环和Iterable接口
2012-09-11 21:50 2062增强型For循环没什么好说的,Just see link ... -
未完 Java Collections | 容器
2012-09-06 11:35 1839Sources: http://docs.oracle.com ... -
Java object Initialization (class Instantiation) | 对象的初始化(即类的实例化)
2012-09-03 09:12 3005类实例即对象 ... -
未完Java class&interfac 's Loading, Linking and Initializing | 类与接口的加载、链接和初始化
2012-08-31 19:01 1672JVM装载一个类的时候,首先检查他有没有父类,如果有父类则装载 ... -
未完 java Static 总结
2012-08-31 18:47 1404static可以用来修饰: 字段 Fields 方法 Meth ... -
未完 JVM Runtime Data Areas & Java Memory Model | 内存分配模型 & Java数据存储
2012-08-31 18:43 1891Java虚拟机内存分配模型 需精读:Chapter 5 of ... -
Java Data Types & Literals | 数据类型 和 字面量
2012-08-30 18:12 3946Java数据类型划分: OR http:// ... -
未完 Variables 变量 (Instance/Class/Local)
2012-08-29 10:59 1706Local/Instance/Class Variables ... -
未完 Regular Expressions | 正则表达式
2011-08-25 11:43 1530Extended Regular Expression ... -
java Date(util.Date/sql.Date/sql.Timestamp/sql.Time) & Oracle DATE Type 时分秒 精度问题
2011-05-17 09:32 3966遇到的问题描述: 数据库为Oracle,其jdbc驱动为ojd ... -
Java byte code (bytecode)
2011-05-04 02:55 3888keys: bytecode, byte code, opco ... -
Java Classloading Mechanism : ClassLoader & ASM & 动态字节码增强
2011-04-21 13:29 2429Setting the class path: http:// ... -
class literal & instance.getClass() & Class.forName(String className)
2011-04-20 12:33 2340常用的几种取得Class类实例的方式: 1 class lit ...
相关推荐
- **面向对象编程**:深入了解Java的面向对象特性,如封装、继承、多态等。 - **集合框架**:掌握Java集合框架的核心类和接口,如`List`、`Set`、`Map`等。 - **异常处理**:理解Java异常处理机制,包括异常的捕获、...
此外,深入理解类的封装、继承和多态性是面向对象编程的基础。 2. **异常处理**:Java的异常处理机制允许程序员捕获并处理运行时错误,使用try-catch-finally语句块和特定的异常类可以有效地控制程序流程,提高程序...
* 面向对象编程:面向对象编程是Java语言的核心概念,包括封装、继承、多态等特性。 * Java基础语法:包括基本数据类型、运算符、控制流、数组定义等。 Java学习Tips *掌握类和对象的概念是学习Java的关键。 *学习...
这是针对Java基础知识的系列教程,覆盖了语言基础、面向对象编程、异常处理等多个方面,适合Java初学者入门学习。 #### 10. Java Hardware 讲解了Java程序如何与硬件设备进行交互,包括串口通信、网络接口卡操作等...
Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和强大的库支持而闻名。这里我们将探讨"330个有用的Java Tips"这个主题,它涵盖了Java编程的各种技巧和最佳实践,旨在帮助开发者提高代码质量,提升...
2. **类与对象**:深入理解面向对象编程,如封装、继承和多态,以及如何设计和实现类。 3. **接口与抽象类**:学习如何使用接口来定义行为规范,以及何时使用抽象类来实现代码复用。 4. **集合框架**:熟悉...
- **基础知识**:包括Java语法、面向对象编程原则等。 - **高级特性**:如泛型、注解、Lambda表达式等新特性。 #### 2.8 Java Hardware - **硬件交互**:介绍了Java如何与硬件设备交互,如串口通信、USB设备等。 - ...
3. **面向对象编程**:Java是面向对象的语言,可能会介绍如何进行类的设计,包括封装、继承、多态等概念,以及如何使用接口和抽象类来实现设计模式。 4. **集合框架**:Java的集合框架提供了丰富的数据结构,文档...
- **类与对象**:理解面向对象编程的基本概念,包括封装、继承、多态。 - **异常处理**:熟悉try-catch-finally语句,理解Checked异常和Unchecked异常的区别。 - **集合框架**:了解List、Set、Map接口及其实现类...
这个考试主要针对Java编程语言的基础知识,包括语法、面向对象概念、异常处理、多线程、输入/输出、集合框架以及数据库连接等内容。通过SCJP认证,证明了考生具备编写高质量、可维护的Java程序的能力。 模块5...
- **面向对象编程**:如类的设计、继承、多态性等。 - **异常处理**:如何正确地处理运行时异常。 - **集合框架**:Java中的集合类及其使用方法。 - **并发编程**:多线程编程的基础和最佳实践。 - **性能优化**:...
Java是一种广泛使用的面向对象的编程语言,以其跨平台兼容性和强大的功能而闻名。"ways-to-java-study.rar"这个压缩包文件显然包含了帮助学习Java的资源,特别是"1000 Java Tips翻译",这可能是一个包含了一千个Java...
作者 Bruce Eckel 用通俗易懂的语言讲解了 Java 的核心概念,包括面向对象编程、泛型、异常处理等内容。 - **O'Reilly 出版社的《Java 系列丛书》**:这一系列书籍涵盖了 Java 的各个方面,包括基础知识、高级特性...
- **第二周**:深入探讨类和对象、继承、封装、多态等面向对象编程的核心概念。 - **第三周**:讲解更高级的主题,包括异常处理、输入/输出操作、图形用户界面(GUI)开发等。 #### 特色与辅助工具 为了帮助读者更好...
2. **面向对象编程**:Java是纯面向对象的语言,支持类、对象、继承、封装、多态等概念。类是对象的蓝图,对象则是类的实例。继承允许一个类(子类)继承另一个类(父类)的属性和方法。封装是将数据和操作这些数据...
- Java是高级面向对象的语言,具有垃圾回收机制,而C是更底层的编程语言,需要手动管理内存。 - Java更适合大型企业级应用,C则在嵌入式系统和高性能计算中占据一席之地。 8. **社区与论坛**: - 加入Java开发者...
- **类与对象**:介绍面向对象编程的基本概念,包括类的定义、对象的创建与销毁、封装、继承和多态。 - **异常处理**:讲解如何使用try-catch-finally语句块进行异常处理,以及不同类型的异常类和自定义异常。 - ...
2. **面向对象编程**:封装、继承、多态是Java的核心特性,理解并能熟练应用这些概念是成为合格Java开发者的关键。 3. **异常处理**:Java中的异常处理机制允许程序员优雅地处理运行时错误,确保程序的稳定性和可靠...