- 浏览: 806687 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (360)
- Java (101)
- JPA/Hibernate (10)
- Spring (14)
- Flex/BlazeDS (37)
- Database (30)
- Lucene/Solr/Nutch (0)
- Maven/Ant (25)
- CXF/WebService (3)
- RPC/RMI/SOAP/WSDL (1)
- REST (6)
- TDD/BDD/JUnit (1)
- Servlet/JSP (2)
- AI/MachineLearning (3)
- Resource (1)
- 字符编码 (2)
- OOA/OOPS/UML (5)
- DesignPattern (8)
- 算法与数据结构 (11)
- Web&App Server (13)
- 并发&异步&无阻塞 (7)
- Entertainment (4)
- JavaScript/ExtJS (45)
- CodeStyle&Quality (1)
- svn/git/perforce (8)
- JSON (2)
- JavaScriptTesting (4)
- Others (6)
- RegularExpression (2)
- Linux/Windows (12)
- Protocal (2)
- Celebrities (1)
- Interview (1)
- 计算机语言 (1)
- English (2)
- Eclipse (5)
- TimeZone/时区 (1)
- Finance (1)
- 信息安全 (1)
- JMS/MQ (2)
- XSD/XML/DTD (3)
- Android (4)
- 投资 (3)
- Distribution (3)
- Excel (1)
最新评论
-
qdujunjie:
如果把m换成具体的数字,比如4或者5,会让读者更明白
m阶B树中“阶”的含义 -
java-admin:
不错,加油,多写点文章
关于Extjs的mixins和plugin -
xiehuaidong880827:
你好,我用sencha cmd打包完本地工程后,把app.js ...
ExtJS使用Sencha Cmd合并javascript文件为一个文件 -
KIWIFLY:
lwpan 写道inverse = "true&qu ...
Hibernate中什么时候使用inverse=true -
luedipiaofeng:
good
消除IE stop running this script弹出框
1. 多态概念要点:
概念:
类重载(overload)方法,子类覆盖(override)父类的方法都是多态的体现.
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法
结论二:当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量
class SuperClass { int number; public SuperClass(int number) { this.number = number; } public int getNumber() { return ++number; } } class SubClass1 extends SuperClass { public SubClass1(int number) { super(number); } } class SubClass2 extends SuperClass { int number=200; public SubClass2(int number) { super(number); } } class SubClass3 extends SuperClass { int number=300; public SubClass3(int number) { super(number); } public int getNumber() { System.out.println("super number:"+super.getNumber()); return ++number; } } class SubClass4 extends SuperClass{ public SubClass4(int number){ super(number); } public int getNumber() { System.out.println("super number:"+super.getNumber()); return ++number; } } public class TestPolymorphsim { public static void main(String[] args) { SuperClass s1 = new SubClass1(100); SuperClass s2 = new SubClass2(100); SuperClass s3 = new SubClass3(100); SuperClass s4 = new SubClass4(100); System.out.println(s1.getNumber()+"\n"); System.out.println(s2.getNumber()+"\n"); System.out.println(s3.getNumber()+"\n"); System.out.println(s4.getNumber()); } }
output:
101
101
super number:101
301
super number:102
102
2. super关键字使用要点:
结论一:构造函数里面通过super调用父类的构造函数的语句只能放置在第一行,否则编译报错.
结论二:如果子类里面有和父类同名的属性和方法(构造函数除外),则父类的同名属性和方法在子类中会被覆盖,子类里面可以通过super.propertyName和super.methodName的方式来访问父类中被覆盖的属性和方法,当然前提是父类的属性和方法不是private的,不过对于属性你可以说子类覆盖了父类的同名属性,也可以说子类没有覆盖,因为就算子类覆盖了属性,如果运行时的instance调用的是方法是继承自父类的,那么该方法访问的是父类的同名属性,不是子类的,子类的方法访问的是子类的属性,如上面的s3打印的是[super number:101,301].
结论三:子类里面的普通方法super.methodName的位置不需要是第一行,这跟构造函数不同.
3. 构造函数定义要点:
1)如果一个类没有定义任何构造函数,编译器默认会生成一个无参构造函数
2)如果一个类显示了定义的有参构造函数,那么编译器就不会生成无参构造函数,如果此时你需要无参构造函数,你得显示的定义一个无参构造函数
3)子类的构造函数是一定要调用父类的构造函数的,如果子类的构造函数中没写任何调用父类的构造函数的代码,那么其实隐含者子类会调用父类的无参构造函数,所以这个时候父类必须要有无参构造函数存在
4)父类如果没有定义任何构造函数,编译器默认会给父类生成一个无参构造函数,这种情况下,子类的构造函数没有任何约束,你可以不定义,也可以显示的定义
5)父类如果定义了有参构造函数,而没有显示定义无参构造函数的话,那么子类的构造函数中必然也要显示的调用父类的有参构造函数,子类中不能省略调父类构造函数的代码
发表评论
-
sapjco3 notes
2019-03-21 14:51 1170sapjco https://support.sap.com/ ... -
使用RestTemplate发送post JSON请求
2019-01-12 17:30 4753private final String BASE_URL = ... -
使用RestTemplate发送post JSON请求
2019-01-12 17:30 3534private final String BASE_URL = ... -
Spring线程池ThreadPoolTaskExecutor
2018-08-06 09:51 1904<!-- spring thread pool ex ... -
Spring注解事物@Transactional不工作
2018-08-02 18:50 2686“In proxy mode (which is the de ... -
创建前缀索引报长度超出错误
2018-07-25 15:44 1740表结构定义如下: CREATE TABLE `sku` ( ` ... -
Mysql Varchar字符长度
2018-07-25 15:23 1356`sku_name` VARCHAR(200) NOT NUL ... -
使用 Spring RestTemplate 发送 post 请求
2018-07-23 18:49 11733注意点: 1)使用MultiValueMap设置入参,不要使 ... -
Java动态代理Dynamic Proxy
2018-07-21 16:33 831JAVA学习篇--静态代理VS动态代理 https://blo ... -
分布式实时日志分析解决方案 ELK 部署架构
2018-07-20 09:52 1195原文链接:http://www.importn ... -
为什么HashMap容量一定要为2的幂呢?
2018-07-19 10:07 1731原文链接:https://blog.csdn.net/wang ... -
为什么计算HashCode时通常选择31这个数?
2018-07-19 10:05 1427摘自http://www.importnew.com/2208 ... -
jackson自定义序列化和反序列化
2018-07-10 18:47 2247原文链接:https://blog.csdn.net/liu ... -
Pay special attention when modifying online running system
2017-06-23 10:25 0Never remove any properties, me ... -
Map中的Null key, Null Value
2017-06-14 10:52 1950ConcurrentHashMap的key和value都不能为 ... -
Java语法糖
2017-06-05 20:03 534Java语法糖之foreach http://www.imp ... -
Java集合相关
2017-05-24 17:55 0Java集合框架:ArrayList http://www. ... -
Java数据类型的转换:隐式(自动)转换与强制转换
2017-05-14 10:46 0http://blog.csdn.net/u011240877 ... -
分布式开放消息系统(RocketMQ)的原理与实践
2017-05-07 19:55 735分布式开放消息系统(RocketMQ)的原理与实践 http ... -
面试知识点复习(Interview knowledge review)
2017-05-07 18:39 0JVM,多线程相关知识 http://darrenzhu.it ...
相关推荐
Java语言中的覆盖(Override)和重载(Overload)以及多态(Polymorphism)是面向对象编程的重要概念,它们是实现代码复用和灵活性的关键。 **多态性(Polymorphism)** 多态性是Java中一种允许一个接口有多种实现的方式。...
5. 构造器的多态:虽然构造器不能被继承,但是子类可以通过super关键字调用父类的构造器,实现不同子类在初始化阶段的不同行为。 6. 接口与多态:接口是实现多态的一种重要手段,它定义了一组方法,任何实现该接口...
在Java编程语言中,继承、多态、重写、修饰符以及`super`和`this`的使用是面向对象编程的核心概念。这些知识点对于理解和编写高效、可维护的代码至关重要。 1. **Java继承**: Java继承允许一个类(子类)继承另一...
这通常在子类构造函数的第一行完成,使用`super()`调用。 ### 多态 **1. 多态的定义** 多态(Polymorphism)意味着一个接口可以有多种不同的表现形式。在Java中,多态分为编译时多态和运行时多态。编译时多态主要...
- **5.5.2 调用父类的构造函数**:子类可以通过`super`关键字调用父类的构造函数。如果子类没有显式调用父类构造函数,Java会默认调用父类的无参构造函数。如果父类没有无参构造函数,子类必须显式调用父类的构造...
`this`关键字在方法中引用当前对象,而在构造函数中,`super`关键字用于调用父类的构造函数。 理解并熟练运用这些关键字是Java编程的基础,它们帮助我们实现各种设计模式,保证代码的可读性、可维护性和高效性。在...
子类构造器可以通过`super`关键字调用父类的构造函数,确保初始化过程正确进行。 6. **内部类与匿名类** 内部类是定义在另一个类内部的类,可以是静态的或非静态的。非静态内部类可以访问外部类的所有成员,包括...
通过以上对封装、继承、覆盖、构造过程、多态以及 `static`、`this`、`super` 和 `final` 关键字的详细介绍,我们可以更好地理解和运用Java的核心概念和技术点,从而编写出更加高效、灵活和易于维护的代码。
总结,这个PPT学习教案涵盖了Java中关于继承、多态、覆盖、重载、构造函数重载、内部类与匿名类以及接口的基本概念和使用,这些都是Java面向对象编程的基础,对于理解Java编程模式和设计模式至关重要。通过学习这些...
默认情况下,子类的所有构造函数都会隐式地调用父类无参数的构造函数,这是因为每个构造函数的第一行都有`super();`的默认语句。如果父类没有无参数的构造函数,子类的构造函数必须显式地通过`this`或`super`调用...
如果父类有多个构造函数,则可以通过`super`关键字显式指定调用哪个构造函数。 ##### 示例: ```java class BaseClass { BaseClass() { System.out.println("BaseClass Constructor"); } } class ChildClass ...
- `super()`用于子类构造函数中调用父类的无参构造函数,而`super.method()`则用来调用父类的特定方法。 5. **抽象类与接口中的方法覆盖**: - 抽象类中的抽象方法默认需要被子类覆盖,否则子类也必须是抽象的。 ...
子类不会继承父类的构造函数,在子类中可以使用super关键字调用父类函数,使用override重写父类函数。 三、多态 多态是面向对象编程的一个重要概念,它允许对象具有多种形态。在Kotlin中,多态可以通过继承和重写...
通过阅读《Java关键字this、super使用总结》和《深入理解java多态性》这两篇文章,你可以更深入地了解这两个关键字和多态的概念,并通过示例代码来巩固理解。这些资源通常会包含详细的解释、示例代码以及实践中的...
它包括了类的继承、成员的访问控制、构造函数的处理、方法覆盖、final关键字的应用、this和super的关键字用法、接口的实现以及多态和对象类型转换等核心概念。理解和掌握这些知识点对于编写高效、可维护的Java代码至...
如果父类没有无参数构造函数,或者需要调用有参数的构造函数,那么必须在子类构造函数中使用`super`关键字显式调用,如: ```java class Base { Base(int i) {} } class Sub extends Base { Sub(int i) { super...
- 显式调用父类构造函数:可以使用`super(参数列表)`在子类构造函数中显式调用父类的构造函数。需要放在子类构造函数的第一行。 - 构造函数的重载和多态:与普通方法一样,构造函数也支持重载。在子类中重写父类方法...
14. **`super`关键字**:与`this`相反,`super`用于调用父类的成员,包括构造函数。 15. **对象转型**:向上转型是将子类对象赋值给父类引用,允许调用父类的公共和受保护成员。向下转型需先向上转型再转换,以访问...
**Java语言程序设计-第七章 类的封装、多态和继承** 在Java编程语言中,类的封装、多态和继承是面向对象编程的三大核心特性。这些概念为软件开发提供了强大的抽象能力和代码复用机制,使得程序设计更加灵活、高效。...
2. **构造函数**:子类可以调用父类的构造函数,通过`super()`关键字来初始化父类的状态。了解何时和如何使用`super`关键字是重要的。 3. **方法覆盖**(Override):子类可以重写父类的方法,提供不同的实现。这有...