继承sls

2024-03-19 09:32
文章标签 继承 sls

本文主要是介绍继承sls,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.继承        extends

1.为什么使用继承:

在程序的编写过程中,可能出现多个重复内容,这些重复类容需要提取出来

2.什么是继承

将多个类中相同属性和行为提取出来形成一个父类,多个类去继承这个类

3.好处:提高代码复用率,便于功能的扩展

4.格式:

//父类
public class Animal {    }
//子类
public class Cat extends Animal{}

如果我们没有显式的声明一个类的父类的话,则此类继承于 java.lang.Object 类

Animal类默认继承了java.lang.Object类

5.特点:

  • 子类拥有父类非 private 的属性、方法。

  • 父类提供gettersetter方法供子类使用私有属性

//父类
public class Animal{//私有化属性private String name;private int age = 10;//非私有化属性public String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//非私有化方法public void eat(String food){System.out.println(age+"岁的"+sex+"性"+name+"在吃:"+food);}	//私有化方法private void fly(){System.out.println("飞翔");}}
//子类
public class Dog extends Animal{public void eat(String food){//调用父类属性super.sex = "男";//不能调用父类的私有属性
//        super.name = "狗";//通过调用父类setter方法给name赋值super.setName("狗");//通过父类getter方法获取age的值super.getAge();        // age = 10//调用父类的eat方法super.eat(food);//不能调用父类中的私有方法
//    		super.fly();	}}
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

//父类
public class Animal{private String name;private int age;public String sex;public void eat(String food){System.out.println(age+"岁的"+sex+"性"+name+"在吃:"+food);}	}
//子类
public class Cat extends Animal{//子类特有的属性private String color;//子类特有的方法public void speak(){System.out.println("喵喵喵");}}
  • 只能单继承,支持多重继承
//错误写法,只能继承一个父类
public class Cat extends Animal extends Dog{}
//多重继承
public class Cat extends Animal{}public class Animal extends Biology{}
  • 子类不继承父类的构造方法,只能调用

//父类
public class Animal{private String name;private int age;public String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//无参构造方法public Animal() {System.out.println("已自动调用父类无参构造方法");}//有参构造方法public Animal(String name, int age) {this.name = name;this.age = age;}public void show(){System.out.println("姓名:"+name+"年龄:"+age);}}
//子类
public class Cat extends Animal {//无参构造方法public Cat(){//系统会自动调用父类的无参构造方法}//有参构造方法public Cat(String name,int age){//用super调用父类的有参构造方法super(name,age);}}
//测试类
public class Demo {public static void main(String[] args) {Cat cat = new Cat();    //自动调用父类的无参构造方法Cat cat1 = new Cat("虹猫",18);	cat1.show();}}
//结果
已自动调用父类无参构造方法
姓名:虹猫 年龄:18

2.方法的重写

什么是方法的重写:

在继承的情况下,子类重写父类方法

原则:

方法名相同,参数列表相同,返回值类型必须是父类返回值的派生类,访问权限不得严于父类

@Override,表示该方法一定是重写父类的方法

//父类
public class Animal{public void eat(String food){System.out.println(age+"岁的"+sex+"性"+name+"在吃:"+food);}}
//子类
public class Cat extends Animal {@Override    //表示该方法一定是重写父类的方法public void eat(String food){}//子类重写方法的权限比父类权限小,会报错
//    protected void eat(String food){//	}}
//父类
public class Animal{public void eat(String food){System.out.println("吃"+food);}}
//子类1
public class Cat extends Animal {@Override    //表示该方法一定是重写父类的方法public void eat(String food){System.out.println("猫在吃"+food);}}
//子类2
public class Dog extends Animal{//没有重写eat方法
}
//测试类
Cat cat = new Cat();
cat.eat("鱼");
//结果为:猫在吃鱼Dog dog = new Dog();
dog.eat("骨头");
//结果为:吃骨头结论:若子类若重写了eat方法,调用时,则调用子类中的eat方法
若子类没有重写eat方法,则调用父类中的eat方法

3.super关键字和this关键字

Super关键字表示自己的父类对象

this关键字表示自身对象

//父类
public class Animal{public String name;public Animal(String name){this.name = name;    //this.age表示当前对象Animal的age}public void speak(){}
}
//子类
public class Cat extends Animal {public int age;public Cat(String name,int age){
//调用父类中的某个构造方法时,必须写在第一行super(name);this.age = age;     //this.age表示当前对象Cat的age}public void show(){System.out.println("hhh");}public void eat(){
//调用父类中的方法super.speak();
//调用本类中的方法this.show();}
}

所有子类构造方法中如果没有显式地调用父类的构造方法,都会默认调用父类的无参构造方法,若此时父类没有无参构造方法,会报错。

//父类
public class Animal{public String name;public Animal(String name){this.name = name;}
//父类的无参构造方法public Animal(){System.out.println("哈哈哈");}
}
//子类
public class Cat extends Animal {public int age;//两个子类构造方法均没有显式地调用父类构造方法	public Cat(String name,int age){//super();默认调用父类无参构造方法,不显示}public Cat(){//super();默认调用父类无参构造方法,不显示}
}public class Demo {public static void main(String[] args) {Cat cat = new Cat();Cat cat1 = new Cat("小白",12);}}
结果为:
哈哈哈
哈哈哈
均调用了父类的无参构造方法

在构造方法中,无论是super调用父类的构造方法,还是this调用本类的构造方法,都必须出现在第一行,在一个构造方法中不能同时调用父类和子类的构造方法。

//父类
public class Animal{public String name;public Animal(String name){this.name = name;}public Animal(){}
}
//子类
public class Cat extends Animal {public int age;public Cat(String name,int age){}public Cat(){
//this和super只能2选1this("张三",18);super();      //报错}
}

构造方法中,this调用构造方法时,只能调用其他构造方法,不能自己调用自己

public class Cat extends Animal {public int age;public Cat(String name,int age){super.name = name;this.age = age;}public Cat(){//	this();    不能调用自己this("哈哈", 15);//可以调用其他构造方法}

4.fianl关键字

final表示最终的,不可修改的

final修饰类: 表示为该类不可被继承

final修饰方法:表示该方法不可被重写

final修饰变量:表示该变量不可改变,就是常量

//父类
//public final class Animal{	用final修饰类时,该类无法被继承
public  class Animal{public final String name="小白";public Animal(String name){//	this.name = name; //final修饰的变量为常量,运行过程中不能再次对他赋值}public Animal(){System.out.println("哈哈哈");}//final修饰的方法,无法被子类继承public final void show(String name){}}
//子类
public class Cat extends Animal {public int age;public Cat(String name,int age){//	super.name = name; //final修饰的变量为常量,运行过程中不能再次对他赋值this.age = age;}public Cat(){}
//无法重写父类被final修饰的方法
//	@Override
//	public void show(String name){
//		
//	}}

这篇关于继承sls的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825530

相关文章

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

OOP三个基本特征:封装、继承、多态

OOP三个基本特征:封装、继承、多态 C++编程之—面向对象的三个基本特征 默认分类 2008-06-28 21:17:04 阅读12 评论1字号:大中小     面向对象的三个基本特征是:封装、继承、多态。     封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。   封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信

c++ 类的继承详解

在 C++ 中,类的继承是一种面向对象编程(OOP)的特性,允许创建一个新的类(派生类)从一个已有的类(基类)派生。通过继承,派生类可以重用基类的属性和行为,并且可以扩展或修改这些行为。继承是一种代码重用和扩展的机制,使得派生类能够继承基类的特性并添加或修改特性。 1. 继承的基本语法 class Base {// 基类的成员};class Derived : public Base {//