继承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

相关文章

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 {//

C++ 第8章 继承

继承(Inheritance)是面向对象程序设计中软件重用的关键技术。 8.1 类之间的关系 一个大的应用程序,通常由多个类构成,类与类之间互相协同工作。 class Vehicle{int wheels;double weight;double loading;public:void initialize(int in_wheels, double in_weight);int get

C++ 菱形继承与虚拟继承的详解与代码示例

在C++中,多重继承虽然强大,但也会带来不少问题。特别是当继承链中出现菱形继承时,容易导致基类的重复实例化。本文将深入讨论菱形继承的问题,并详细解释如何通过虚拟继承来解决它。同时,给出一个简单的代码示例,并逐步解析输出结果。 什么是菱形继承? 菱形继承是指在多重继承中,同一个基类被多个派生类继承,而这些派生类又被另一个类继承,最终形成菱形结构,如下图所示: A/ \B C\ /D

C++_继承详解

继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,之前我们接触的复用都是函数复用,今天我们所讨论的继承是类设计层次的复用。 子类继承父类的成员后,父类的 成员函数 和 成员变量 都会变成子类的一部分,其中父类的成员函数与子类的成员函数使用的是同一个函数(构造

【C++】C++的输入输出、循环、条件、字符串、数组、类、继承的使用实例

本文介绍C++的基本使用,用一个程序说明的基本运用,当然C++中的指针与运算符的重载这些特色东西还没有涉及,只是把编程中最基本的东西讲述一次, 与《【Python】Windows版本的python开发环境的配置,Helloworld,Python中文问题,输入输出、条件、循环、数组、类》(点击打开链接)是姊妹篇,据说这堆东西出书的话能写很多很多页,上课的话能上大半学期,真是醉了。 以下程

C#复习之继承的基本规则

知识点一:基本概念 知识点二:基本语法 知识点三:实例    知识点四:访问修饰符的影响 知识点五:子类和父类的同名成员 总结: