3-4、继承性
2023-12-13 17:54:41
1、继承定义
- 继承是类与类之间的一种关系
- 继承的好处
- 子类拥有父类的所有属性和丰富(非private)
- 减少代码冗余,实现代码重用
- 继承的语法:子类 extends 父类{}
- 单根继承:一个类只能有一个父类;但一个父类可以有多个子类
- 子类会继承父类的属性+方法(有条件的)
public class Animal{
public String name;
/**
* 父类默认构造方法
*/
public Animal(){
System.out.println("Animal()");
}
protected void desc(){
System.out.println("我的名字叫:"+name);
}
}
public class Dog extends Animal{
}
public class Main {
public static void main(String[] aaa) {
Animal animal = new Animal();
animal.name = "tom";
animal.desc();
// 子类会集成父类的属性+方法
Dog dog = new Dog();
dog.name = "jack";
dog.desc();
}
}
2、构造方法
- 子类实例化时,先调用父类的默认构造方法,再调用子类的构造方法
public class Animal{
public String name;
/**
* 父类默认构造方法
*/
public Animal(){
System.out.println("Animal()");
}
protected void desc(){
System.out.println("我的名字叫:"+name);
}
}
public class Dog extends Animal{
public Dog() {
System.out.println("Dog()");
}
}
public class Main {
public static void main(String[] aaa) {
// Animal()
// Dog()
// 我的名字叫:jack
Dog dog = new Dog();
dog.name = "jack";
dog.desc();
}
}
- super:在子类的构造方法中调用父类的构造方法,用在子类的构造方法里,调用父类里的构造方法,super语句一定要处于整个构造方法的第一行
public class Animal{
public String name;
public int age;
/**
* 父类默认构造方法
*/
public Animal(){
System.out.println("Animal()");
}
public Animal(int age){
System.out.println("Animal(int age)");
this.age = age;
}
public Animal(String name, int age){
System.out.println("Animal(String name, int age)");
this.name = name;
this.age = age;
}
protected void desc(){
System.out.println("我的名字叫:"+name);
}
}
public class Dog extends Animal{
public Dog() {
System.out.println("Dog()");
}
public Dog(String name) {
// 对super的调用必须是构造器中的第一个语句
// int a = 1;
super(name,12);
this.name = name;
}
}
public class Main {
public static void main(String[] aaa) {
// Animal(String name, int age)
// 我的名字叫:jack
Dog dog1 = new Dog("jack");
dog1.desc();
}
}
3、变量隐藏
- 如果子类和父类中都定义了一个同类型同名的属性,在子类中使用的就是子类的属性,如果想用父类的属性,则需要使用super
public class Animal{
public String name;
/**
* 父类默认构造方法
*/
public Animal(){
System.out.println("Animal()");
}
public void desc(){
System.out.println("我的名字叫:"+name);
}
}
public class Dog extends Animal{
private String name;
public Dog() {
System.out.println("Dog()");
}
public Dog(String name) {
this.name = name;
}
public void desc(){
System.out.println("我的名字叫:"+name);
}
public void test(){
System.out.println(name);
System.out.println(super.name);
desc();
super.desc();
}
}
public class Main {
public static void main(String[] aaa) {
// Animal()
// jack
// null
// 我的名字叫:jack
// 我的名字叫:null
Dog dog1 = new Dog("jack");
dog1.test();
}
}
4、方法重写
- 条件:子类里的方法名、形参、返回类型与父类里的方法完全一样
5、父子类的访问修饰符
- private修饰的属性不能被子类继承,public、protected、默认 这三修饰符修饰的可以被继承
public class Animal{
private String name;
}
public class Dog extends Animal{
}
public class Main {
public static void main(String[] aaa) {
Dog dog1 = new Dog();
// 报错 name 在 Animal 中是 private 访问控制
dog1.name ="jack";
}
}
文章来源:https://blog.csdn.net/sinat_35615296/article/details/134955346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!