super关键字
super(),表示在子类的构造方法中调用父类的构造方法(可以通过这种方法在子类的构造方法中初始化父类中的属性),super()只能出现在构造方法的第一句上。super(),在子类的构造方中指明构造父类时调用哪一个父类的构造方法构造父类。
super,表示一个父类的对象,可以通过super来使用父类中可以访问的方法(可以在父类中定义setXxx(),getXxx()方法来访问父类中的私有属性),super可以屏蔽父子类中同名属性的命名冲突。
例:
public class Person{
……
private int age;
private String name;
public Person(){
}
public Person(String name){
this.name=name;
}
public void study(){
System.out.println(“学习”);
}
}
class Child extends Person{
private int age;//属性的遮盖
public Child(String name){
spuer(name);//调用父类的构造方法初始化父类的属性
}
public void study(){//覆盖了父类中的study()方法
System.out.println(spuer.getName()+“在小学学习”);
//super.getName()也就是调用了父类的访法
}
}
注意:构造方法的第一句既不是this(),也不是super()时,会隐含的调用其父类的无参的构造方法,即隐含的有super(),在写类的时候,一定要写无参的构造方法。
少覆盖原则:既子类应当尽量少的覆盖父类方法,如果覆盖了父类的大多数方法,那就应当考虑是否应当有继承关系
java中的多态(以子类覆盖了父类的方法为前提)
多态,把子类对象主观的看作是其父类型的对象,那么父类型就可以是很多种类型。
多态,编译时多态(方法的重载)
运行时多态(多态)
编译时类型,也就是可以被看作的类型,主观认定。
运行时类型,也就是实际的对象实例的类型,客观不可改变(也是被看作类型的子类型)
在对象产生时,运行时类型就已经确定不会改变,编译时类型可以和运行时类型不同。
对象引用声明并赋值后,就确定了其运行时类型。
编译时类型对象引用背后所指向运行时类型可以是其类型或者是其子类型。
多态三特性
1,对象实例确定则不可改变(客观不可改变)
2,只能调用编译时类型所定义的方法。
3,运行时会根据运行时类型去调用相应类型中定义的方法。
多态的意义:在需要使用一类对象的共性时,可以用多来屏蔽掉其子类中的差异。
注意:类的属性是没有多态的,会根据编译时类型访问。
子类覆盖了父类的方法,把子类对象实例赋值给父类类型的对象因用时才会有多态。
要注意区分子类中的方法重载。
对于方法的重载,会使用编译时类型来进行相应的方法调用。
instanceof,是用于判断一个对象是否属于某个类型
例
public class Animal{
……
public void eat(){
System.out.println(“eat something”);
}
public static void main(String[] args){
Animal a=new Dog();
Animal b=new Cat();
if(b instanceof Dog){
Dog d=(Dog)b
}
/*
Animal是编译时类型,并且是实际类型的父类,所以
多态优两个前提,父子类关系,还有方法的覆盖
*/
a.eat();
b.eat();
}
}
class Dog extends Animal{
public void eat(){
System.out.println(“eat bone”);
}
}
class Cat extends Animal{
public void eat(){
System.out.println(“eat fish”);
}
}
结果:
eat bone
eat fish
//这里之所以显示的是子类中方法结果,就是由于多态,根据其实际类型调用子类的方法
例:
两种代码复用
白箱复用,继承复用,父类中的可以被子类访问到的就可以被继承,会有些不需要的内容被继承,这种方式不太好。
黑箱复用,组合复用,把要复用代码的类的对象作为本类的属性,通过方法的委托来实现有选择的复用,方法的委托是在本类的方法内部通过该类的对象调用要使用的方法。
注意:尽量用组合复用替代继承复用。
例:
public class Car(){
……
}
class Benz{
Car c=new Car();
……
}
分享到:
相关推荐
5. **corejava辅导(4--1)、(4--2)、(4--3)**:这些章节可能涵盖了输入/输出(I/O)流,包括文件操作、字节流和字符流,以及如何使用缓冲区进行高效的数据传输。 6. **corejava辅导(5--1)、(5--2)、(5--3...
整体来看,《Java面试集锦: Core Java Essentials》是一本全面覆盖Java核心技术要点的面试辅导书籍。无论是对于即将参加面试的求职者,还是希望巩固Java基础知识的开发者,本书都提供了丰富的学习材料和面试问题,...
**3.3 corejava辅导(1--2)** - **循环结构**: for、while等循环语句。 - **条件判断**: if-else、switch-case等。 - **异常处理**: try-catch-finally块的使用。 **3.4 corejava辅导(1--3)** - **集合框架**:...
1. Java设计和编程基础:涵盖Core Java编程基础、Java设计原则、算法、模式等核心知识。 2. 数据库和Web前端技术:涉及数据库技术(如Oracle、MySQL、SQL优化和PLSQL开发)、Web前端技术(如H5、CSS3、JavaScript、...
7. **CoreJava辅导资料.zip**:这可能包含Java语言的基础教程或参考资料,包括类、对象、接口、异常处理、集合框架等内容,这些都是JavaWeb开发的基础。 8. **javaWeb基础技术辅导.zip**:这个文件很可能包含了详细...
- CPU: Intel Core i5 2.0 GHz - 内存: 2 GB - 硬盘: 250 GB #### 七、测试结果与分析 **测试项目:** 请假管理系统 **测试人员:** 麦城进 **测试结果:** - **系统操作登陆测试:** 用户登录成功后,能够正确跳转...
"CoreJava.rar"可能是一个包含Java核心编程资源的压缩文件,Java是一种广泛用于开发数据库应用程序的编程语言。在数据库应用中,Java可以用来编写DAO(数据访问对象)层,实现对数据库的操作,如CRUD(创建、读取、...
2. **后端开发**:后端通常基于Java、Python或.NET等语言,利用Spring Boot、Django或ASP.NET Core等框架进行开发。 3. **数据库管理**:MySQL、Oracle或SQL Server等关系型数据库用于存储学生、教师信息以及请假...