}
class Cat2 extends Animal2 {
@Override
void draw() {
System.out.println(“喵喵”);
}
}
class Fish extends Animal2 {
@Override
void draw() {
System.out.println(“泡泡”);
}
追问问题1.4: JAVA作为面向对象,它有什么特点或者好处
1、易于理解,有更好的可读性
2、平台无关性,一次编译,处处运行
3、提供了许多类库,方便开发者的工作,减少开发时间
4、提供了对web的支持
5、具有较好的安全性和健壮性(如垃圾回收)
6、去除了C++中难以理解,易于混淆的特性
1、继承父类重写父类方法,关键字extends
/**
- 图形
*/
class Shape {
void draw() {}
}
/**
- 圆
*/
class Circle extends Shape {
@Override
void draw() {
System.out.println(“Circle.draw()”);
}
}
/**
- 正方形
*/
class Square extends Shape {
@Override
void draw() {
System.out.println(“Square.draw()”);
}
}
/**
- 三角形
*/
class Triangle extends Shape {
@Override
void draw() {
System.out.println(“Triangle.draw()”);
}
}
2、实现接口,重写接口方法,关键字implements
/**
- 图形
*/
interface Shape {
void draw();
}
/**
- 圆
*/
class Circle implements Shape {
@Override
public void draw() {
System.out.println(“Circle.draw()”);
}
}
/**
- 正方形
*/
class Square implements Shape {
@Override
public void draw() {
System.out.println(“Square.draw()”);
}
}
/**
- 三角形
*/
class Triangle implements Shape {
@Override
public void draw() {
System.out.println(“Triangle.draw()”);
}
}
3、同一个类中方法重载
class Animal3{
/*
重载实现多态
*/
public void call(){
System.out.println(“无参数的叫声”);
}
public void call(String mode){
System.out.println(“带参数的叫声”);
}
}
追问问题2.1: 虚拟机是如何实现多态的
通过动态绑定技术(dynamic binding),执行期间判断所引用对象的实际对象类型,根据实际类型调用对应的方法。
三: 重载(Overload)和重写(Override)的区别。重载能够根据返回值的类型区分?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性,具体差别如下:
1、重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
2、重写发生在子类与父类或者子类和接口之间,要求如下:
(1)重写方法不能缩小访问权限;
(2)参数列表必须与被重写方法相同(包括显示形式);
(3)返回类型必须与被重写方法的相同或是其子类;
(4)重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
3、重载对返回类型没有特殊的要求,所以无法通过返回值类型来区分重载。
4、父类的静态方法不能被子类重写。重写只适用于实例方法,不能用于静态方法,当父类和子类有相同名称的静态方法时,如果使用父类接收子类对象,则调用静态方法时,会直接使用父类的方法而隐藏掉子类的静态方法。
追问问题3.1: 构造器(constructor)是否可被重写(override)?
不能,因为构造器不能被继承,因此不能被重写,但可以被重载。
1、抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用(既使用抽象类或者接口接收实际的类型创建出来的对象,如Animal a =new Dog(),Animal可以是接口或者抽象类)
2、一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
3、接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。
3、抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。
4、抽象类中可以定义成员变量,而接口中只能定义常量。
5、有抽象方法的类必须被声明为抽象类,而抽象类不一定需要有抽象方法
追问问题4.1:访问修饰符public,private,protected,以及不写(默认)时的区别
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean,除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
追问问题5.1: JAVA中基本数据类型和包装类型的对应关系和占用字节
| 数据类型 | byte | char | short | int | long | float | double | boolean |
| — | — | — | — | — | — | — | — | — |
| 取值范围 | -2^7 ~ 2^7-1 | 0~ 2^16-1 | -2^15 ~ 2^15-1 | -2^31 ~ 2^31-1 | -2^63 ~ 2^63-1 | -3.403E38 ~ 3.403E38 | -1.798E308 ~ -4.9E324 | false或true |
| 字节数 | 1 | 2 | 2 | 4 | 8 | 4 | 8 | 占用的字节数跟虚拟机类型相关 |
注:《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。
这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
追问问题5.2: JAVA为什么要引入8中基本数据类型
因为编码中使用到基本数据类型的场景非常多,为了减少使用时需要创建的的步骤,提升编码的编程的方便所以引入了基本数据类型。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
[外链图片转存中…(img-mcbHA6mR-1713552424908)]
一线互联网P7面试集锦+各种大厂面试集锦
[外链图片转存中…(img-xexlWFZo-1713552424909)]
学习笔记以及面试真题解析
[外链图片转存中…(img-wutoYMX7-1713552424910)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!