继承
class Animal{
String name;
int age;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
class Dog extends Animal {
public void lookDoor(){
System.out.println("看家");
}
}
class Cat extends Animal{
}
public class ExtendsDemo1{
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
dog.sleep();
System.out.println(dog.name);
System.out.println(dog.age);
}
}
java中,类与类之间继承的时候,不允许一次继承多个类,只允许单继承,但是可以进行多重继承,形成继承体系
使用继承的注意事项:
1、子类无法继承父类中私有的成员
2、子类不能继承父类的构造方法
3、不要为了部分功能而去继承
子类寻找成员变量并使用的流程:
1、先就近原则,在方法内部中查找一次,若找到就使用
2、若方法内部没有需要的变量,去当前类成员变量的位置上查找,若找到就使用
3、若当前类成员变量的位置上没有需要的变量,去父类中的成员变量的位置上查找,若找到就使用
4、若上面3个地方都没有找到所需要的变量,就报错
java中提供了另外一个关键字super,用法跟this很像,但是super代表的是当前子类的直接父类的引用
在子类中,可以通过super关键字使用直接父类中的非私有成员
super关键字的使用注意事项:
1、super仅代表当前类中的直接父类,无法使用super获取父类的父类中的成员
2、super后面不能再调用super
继承和构造方法的关系
在java继承关系中,要想初始化子类,必须先初始化其父类,这里默认super()体现的就是这个意思
1、子类构造方法的第一句话,默认会有一个super(),对父类做初始化,只能在子类构造方法第一句出现。
问题:如果父类中没有无参构造方法呢?
1)使用super关键字调用父类中的有参构造方法,完成父类的初始化
2)调用当前类中其它有参的构造方法间接对父类做初始化
2、java中每一个只允许初始化一次
继承与成员方法的关系:
当子类中的方法声明【方法的返回值类型,方法名和参数列表】与父类中的方法声明一致的时候,只是方法的实现不一样,这个现象叫做方法的重写【方法的覆盖】。
java提供了一个注解帮助我们判断是否是重写@Override
重写所需要注意事项:
1、子类无法重写父类中的私有方法
2、子类无法继承且重写父类中的静态方法
3、子类重写方法的权限,要大于等于父类的方法权限,推荐在没有要求的情况下,保持和父亲一致的权限就好了
面试题:重写和重载什么区别?【overload和override什么区别?】
1、重写是发生在继承关系中的,指的是子类方法的返回值类型和方法名以及参数列表与父类方法一致,只是实现不一样
2、重载是发生在同一个类中,值的是方法名一样,参数列表不同,与返回值无关的现象
final关键字
java提供了以关键字给我们使用,可以修饰父类成员方法,让其只能被子类使用,不能重写。
final: 最终的,不可改变的
final的用法:可以修饰类,变量,方法
类:若修饰类,该类不能被继承
变量:修饰变量,变量变常量,不能修改被final变量的值,自定义常量
方法:若修饰方法,方法不能被子类重写
被final所修饰的成员变量,必须要在构造方法结束之前给值
代码块
代码块:在java程序中,使用{}括起来的代码,代码块
在不同的位置,以及使用不同的修饰词写的代码块,分为不同种类的代码块。
局部代码块:在方法中使用带括号括起来的代码段,整体称之为叫做局部代码块,主要作用是限定变量的作用域
构造代码块:写法和局部代码块的写法是一样的,但是构造代码块是写在类中方法外的位置
随着构造方法的调用而执行,执行顺序是 构造代码块->构造方法
静态代码块:写法上在前两种代码块的写法上,前面是使用static进行修饰,在类中方法外编写
是在程序运行之前,加载的时候执行,只会加载一次,静态代码块只会在程序运行之前有且仅执行一次!
同一个类中静态代码块之间的执行顺序是自上而下
静态代码块 -> 构造代码块 -> 构造方法
多态
多态访问成员的特点:
成员变量:编译看左,运行看左。
成员方法:编译看左,运行看右。
静态成员方法:编译看左,运行看左。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战