继承
本帖最后由 Simp1e 于 2022-3-2 13:48 编辑(1).继承的基本语法结构
//父类
public class Animal {
public String name;
public int age;
public void chi(){
System.out.println(this.name+"吃好吃的");
}
public void zou(){
System.out.println(this.name+"走别人的路,让自己憋屈");
}
}
//子类1
public class Person extends Animal{
public void shuo(){
System.out.println(this.name+"哇啦哇啦的说");
}
}
//子类2
public class Pig extends Animal{
public void hengHeng(){
System.out.println(this.name+"哼哼的叫");
}
}
//调用
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "花花";
p.chi();
p.shuo();
p.zou();
Pig px = new Pig();
px.name = "张博";
px.chi();
px.hengHeng();
px.zou();
}
}
//注意:继承并不是为了解决某个问题,而是为了优化程序代码结构而出现的
//java面向对象三大基本特性:继承 封装 多态
(2).继承的一些特性a. Java的继承是单继承----一个子类只能拥有一个父类,但是一个父类可以拥有多个子类 问题:如果一个类真的需要继承多个类的,并且拿到它所继承的类的方法时应该怎么办?
b.Java允许传递继承结构,在传递继承中,父类的元素(属性和方法)可以通过继承关系无限的传递下去
c.Java中任何一个类都必须有一个父类,如果没有显示声明,则默认继承自Object 注意:Object类是一切类的父类(根类-JDK自带的 super class),所以Object类中的方法所有类都有
d.继承结构中,创建子类对象的同时也一并会创建其父类的对象,并且它遵循先父后子的创建过程,当传递继承关系出现时,则该结构也会一并创建其上上级的父类
注意:
①.Java中的继承关系不宜过于复杂
②.虚拟机构建父类对象时,默认会使用父类空参构造方法创建对象,如果父类中没有空参构造方法,子类默认报错,但是可以在子类的构造方法中通过super来进行父类指定构造方法的调用进行解决
③.super和this无法同时存在,故此一个类中无论怎么使用this去调用其构造方法,总会有一个构造方法不写this或显示声明调用super
e.继承中,并不是所有的元素都可以继承,有一些是可以继承,有一些是不可以继承的
访问范围修饰符和程序包: 程序包:相当于文件夹,方便于我们对于程序代码的分类管理
注意:使用带有包结构管理的类,那么如果使用类和被使用类在同一个包结构下,则可以直接使用,如果包结构不同,则使用类必须导包以后才能使用被实用类
导包的手段:
(1).在被使用类前,添加完整的包结构说明
(2).通过import语句导包,如果有多个类需要导包,则可以使用*,的方式来简化导包过程
(3).package和import同时出现时,package语句在import语句之前
命名规范:(1).见名知意 (2).包的层级命名[.[具体的公司名].[项目名]] com.oracle.oasys.具体的功能包名 访问范围修饰符: public > protected > 默认 > private(3).重写当父类中某一些方法无法满足特定子类的需要时,那么该子类需要对某些方法进行重写//父类
public class Animal {
public String name;
public int age;
public void chi(){//父类的等待被重写的方法
System.out.println(this.name+"吃好吃的");
}
public void zou(){
System.out.println(this.name+"走别人的路,让自己憋屈");
}
}
//会产生重写的子类
public class Person extends Animal{
public void shuo(){
System.out.println(this.name+"哇啦哇啦的说");
}
public void chi(){//子类重写以后的方法
System.out.println("我想吃海鲜,我想吃烧烤,我想吃各种好吃的!!!!");
}
}
//没有产生重写的子类
public class Pigextends Animal{
public void hengHeng(){
System.out.println(this.name+"哼哼的叫");
}
}
//注意:重写仅仅影响重写所发生的子类,对于其父类和其他未重写的子类不会产生影响重写和重载的区别
@Simp1e 你这是自己写的吗?还是复制来的?不要一下刷这么多主体,这种完全可以合并到一起。 Hmily 发表于 2022-3-2 15:23
@Simp1e 你这是自己写的吗?还是复制来的?不要一下刷这么多主体,这种完全可以合并到一起。
这算是上课笔记吧,咋和一起啊,萌新不会啊 Simp1e 发表于 2022-3-4 17:18
这算是上课笔记吧,咋和一起啊,萌新不会啊
编辑帖子,笔记里还是发编程求助区的讨论分类吧 光跟着老师后面学肯定是不够的,需要课下多多自学 感觉需要加点实际的例子
页:
[1]