1.继承
syntax: class A extends B
子类可以继承父类的所有成员变量和方法
继承的作用
- 通过继承可以简化类的定义
- java只允许单继承,不允许多重继承
- 可以有多层继承例如B继承A,C继承B, 那么C就间接继承了A
- 子类继承了父类的所有变量和方法,但是不继承父类的构造方法。在子类的constructor中可以使用super()语句来调用父类的constructor。
- 如果子类的构造方法中没有显式地调用父类的constructor ,也没有使用this关键字调用重载其它的构造方法,则在产生子类的实例对象时,系统默认调用父类的constructor。此时,如果父类中没有no-arg的constructor,将出现compile error。
- super(...)和this(...)不能同时在一个构造函数中出现。
- super(...)和this(...)调用语句只能作为构造函数的第一句出现。
class A
{
int i;
void display(){}
}
class B extens A
{
int j;
void show(){}
}
program1:
A a = new A(); B b = new B()
A aRef; B bRef;
aRef = a; aRef.i , aRef.display();
aRef = b; aRef.i , aRef.display(), aRef.j,aRef.show//compile error
aRef = b,可以这样理解,把子类当成父类用,父类里没有show(),所以编译出错,但是aRef 的类型已经变了,变成了B
program2:
A a = new A(); B b = new B()
A aRef; B bRef;
aRef = a; aRef.i , aRef.display();
aRef = b; aRef.i , aRef.display():
bRef = (B) aRef; bRef.j , bRef.show//compile and run
将父类强行转化成子类,但是现在父类引用的类型已经是B了,所以能这样。
program3:
A a = new A(); B b = new B()
A aRef; B bRef;
aRef = a; aRef.i , aRef.display();
bRef = (B) aRef; bRef.j , bRef.show//compile success but generate a runexception
将父类强行转化为子类,但是现在父类引用的类型还是A,所以编译成功但出现异常
2.重载和重写 overloading and overriding
overloading
- java方法重载-具有相同的函数名,参数的个数或类型不同,这也是多态性的体现
- 需要注意的是 重载的方法可以有返回值或没有,但是不能以函数的返回值类型来区分重载。
overriding
- 子类和父类之间多态性的体现,当子类中定义了和父类中同名和同参数的方法时,父类中的方法就被重写,也成为覆盖。
- 使用super()函数可以调用父类中的方法。
3.private关键字
当类中使用private关键字修饰变量或方法,则子类中不能对此变量进行修改,类的实例对象也不能修改。
4.抽象类 abstract
- 抽象类必须用abstact 关键字来修饰,同理抽象方法。
- 抽象类不能产生实例对象,也就是不能使用new关键字去产生对象
- 抽象的方法只需声明不需要实现。
- 含有抽象方法的类必须声明为抽象类,抽象类的子类必须覆盖了所有的抽象方法后才能被实例化,否则这个类还是一个抽象类。
abstract class A
{
public abstract String hello();
}
class B extends A
{
public String hello()
{
return "hello";
}
}
public class AbstactExample {
public static void main(String[] args) {
A a = new A();//compile error
B b = new B();
}
}
5.final关键字
- final 标记的类不能被继承
- final 标记的方法不能被重写/覆盖
- final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中显式赋值。
- 方法中定义的内置类只能访问该方法内的final类型的局部变量。
- example:
public class FinalExample {
static final int i = 10;
static short s;
public static void main(String[] args) {
s = i;
System.out.println(s);
System.out.println(i);
}
}
output:
10
10
public class FinalExample {
static int i = 10;
static short s;
public static void main(String[] args) {
s = i;//compile error
System.out.println(s);
System.out.println(i);
}
}
分享到:
相关推荐
java相关知识的学习笔记,个人整理,里面涵盖:继承,接口,重载,覆盖,final等等的知识点
day09-方法重载、Debug调试 1. 方法重载 1.1 方法重载(理解) 方法重载概念 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载 多个方法在同一个类中 多个方法具有相同的...
Java 实例 - 方法重载演示源代码-详细教程.zip
圆点符号用于访问对象的成员,构造函数在创建对象时初始化对象 包可用package 来申明 ,可用import 来导入包 目标 理解继承及其特点 运用JAVA程序实现继承 理解多态及其特点设计 运用JAVA程序实现多态 掌握访问修饰...
Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。
第6章--运算符重载
++,--重载,
天轰穿系列教程之-17重载方法以及运算符重载天轰穿系列教程之-17重载方法以及运算符重载天轰穿系列教程之-17重载方法以及运算符重载天轰穿系列教程之-17重载方法以及运算符重载天轰穿系列教程之-17重载方法以及...
21 java-重载 22 java-访问修饰符 23 java-继承 24 java-初识java和数据类型 25 java-多态集合 26 java-异常处理 27-29 大数据离线批量场景化解决方案 30-34 大数据实时检索场景化解决方案 35-37 大数据实时流...
java中函数重载与覆盖的例子,person类和teacher类
Delphi--抽象方法、重载、覆盖。继承实例Delphi--抽象方法、重载、覆盖。继承实例
Java 实例 - 重载方法异常处理源代码-详细教程.zip
java程序设计_第5章_继承、多态、重载与接口
C++实验11--运算符重载.html
c++ 基本知识--重载函数(曹阳).pptx
[Java]重载,重写以及继承,多态的区
C++ 基本知识--重载函数、函数模板(陆璐).pptx
Java 实例 - 重载(overloading)方法中使用 Varargs技术包含源代码和详细教程.zip
java语法 method overload 马克-to-win java视频 方法 重载
python-运算符重载.rar