《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
方法重写
子类继承父类,当发现父类的方法无法完成子类的业务需求时,需要重新对父类的方法进行覆盖重写。
//实现方法重写
public class OverrideTest02 {
public static void main(String[] args) {
//创建对象
People people =new People(“小明”);
//没有这样的构造方法,所以说构造方法不继承
//Chinese chinese =new Chinese(“小红”);
Chinese chinese =new Chinese();
American american =new American();
people.speak();//小明 is speaking
chinese.speak();//null is speaking Chinese
american.speak();//null is speaking English
}
}
class People {
//属性
private String name;
//构造方法
public People(){
}
public People(String name){
this.name = name;
}
//setter and getter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//方法
public void speak(){
System.out.println(this.getName() + " is speaking");
}
}
//中国人类
class Chinese extends People{
public void speak(){
System.out.println(this.getName() + " is speaking Chinese");
}
}
//美国人类
class American extends People{
public void speak(){
System.out.println(this.getName() + " is speaking English");
}
}
public class Test01 {
public static void main(String[] args) {
//父类型的引用指向子类型
//在编译阶段,编译器看这是一个Animal类型的对象,就去Animal的字节码文件看,发现其中有.move()的方法,所以编译通过
//在运行的时候发现真正参与运行是Fish类的,就执行Fish类的move()方法
Animal fish =new Fish();
fish.move();//Fish is swimming
//如果是没有继承关系的类可以多态吗
//Animal dog =new Dog();
//不可以,会报错
Animal bird =new Bird();
bird.move();//Bird is flying
//如果要执行子类的特有方法怎么办?
//bird.sing();//报错,因为在编译阶段,编译器发现他是Animal类型的对象,就去Animal的字节码文件看,发现没有sing()方法,就报错了
//这个时候就要向下转型了
//Bird bird = (Bird) bird; 报错,bird已经被声明了
Bird bird1 =(Bird) bird;
bird1.sing();//Bird is singing
//向下转型也有风险
/*编译器检测到这个fish引用是Animal类型,
而Animal和Cat之间存在继承关系,所以可以向下转型。
编译没毛病。
运行阶段,堆内存实际创建的对象是:fish对象。
在实际运行过程中,拿着fish对象转换成Bird对象
就不行了。因为Bird和Fish之间没有继承关系。
*/
//java.lang.ClassCastException
/*Bird bird2 =(Bird) fish;
bird2.sing();*/
//如何避免这个问题呢?
if(fish instanceof Bird){
Bird bird2 =(Bird) fish;
bird2.sing();
}else{
System.out.println(“不能向下转型”);
}
//不能向下转型
/*
- 程序员要养成一个好习惯:
任何时候,任何地点,对类型进行向下转型时,一定要使用
instanceof 运算符进行判断。(java规范中要求的。)
这样可以很好的避免:ClassCastException*/
}
}
父类Animal
//动物父类
public class Animal {
public void move(){
System.out.println(“Animal is moving”);
}
}
//不继承Animal
public class Dog {
public void move(){
System.out.println(“Dog is running”);
}
}
public class Fish extends Animal {
@Override
public void move() {
System.out.println(“Fish is swimming”);
}
}
//继承Animal
public class Bird extends Animal{
public void move(){
System.out.println(“Bird is flying”);
}
//特有的方法
public void sing(){
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-m4eRkA0t-1714685945915)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!