范围从大到小:
这时我们只需要改成这样就不会报错了:
哪些公司能提供股票交易接口,接口
UNStudent的构造函数就会报错:
这样最后结果就是一样的了。
哪些公司能提供股票交易接口,接口中的方法都是抽象方法所以没有构造函数,不能创建对象。我们定义哪些公司能提供股票交易接口,接口是给子类来扩展的,当然哪些公司能提供股票交易接口,接口同样是一种数据类型。
以上是比叫简单的继承测试,接下来我会对继承的一些细节和实际实验过程中我们可能会遇到一些问题做出解释:
主函数部分就是创建子类UNStudent对象然后调用两个方法:
public class Manage {
public static void main(String[] args) {
UNStudent un = new UNStudent();
un.setName('hyn');
un.study();
un.printName();
}
}
强制转型
自动转型格式:
如果父类中构造方法已被人为改写就必须在子类构造方法里带同样的参数,同时在创建对象时也应该加入相应参数,例如我在Student类加入构造函数:
super(;
子类一定要调用一次父类的构造方法,父类中无参构造方法默认被调用
关键字:extends
}
学生类具有姓名属性、学习等方法,大学生也是学生的一种,除了姓名之外还有年龄比较大这个属性,当然大学生也有学习等方法,只不过大学生的学习方式不再跟小学中学一样了,所以大学生的学习方法跟学生类是不一样的,继承学生类之后需要对学习这个方法进行改写。
在父类和子类的关系中可以看出,父类是子类的抽象类,换句话说,子类在父类的基础上添加或者修改一些属性或者方法。而当父类非常抽象的时候,或者说当我们仅仅知道这个类的对象应该干什么,而具体怎么去做我们都还不清楚的时候,我们可以定义这样一个特殊类,它只有方法的定义,没有方法体,如果一个类中的所有方法都没有方法体,这个类我们叫做哪些公司能提供股票交易接口,接口。
usetName('hyn');
格式:publicclass子类(派生类)extends父类(基类,超类){}
此时的运行结果可以直观看出程序执行过程:
格式:
extendsObject所有类都默认带有一个,可不写。Object类是类层次结构的根,java中所有的类都继承自这个类。例如,当我们在申明Student类时加上去这个语句,并没有报错:
public>默认>protected>private
继承中的构造方法
子类会继承父类中所有的属性和方法,但私有属性和方法不能直接调用
将一个父类类型的对象自动转型为子类
返回值类型,方法名,参数类型(个数,顺序)跟原方法完全一样
运行结果如下:
方法重写(覆盖)
题目:
哪些公司能提供股票交易接口,接口的实现
//继承哪些公司能提供股票交易接口,接口:关键字implements
//public class 子类 extends 父类 implements 哪些公司能提供股票交易接口,接口类,哪些公司能提供股票交易接口,接口类,,{}
//继承哪些公司能提供股票交易接口,接口一定要重写哪些公司能提供股票交易接口,接口中所有的抽象方法
public class IntStudent implements Student{
//重写方法一定要去掉abstract
public void study(){
System.out.println('子类重写哪些公司能提供股票交易接口,接口中的方法!');
}
}
我们需要写出一个学生类,具有姓名这个属性,学习这个方法,为了接下来实验结果的直观,我们将学习这个方法标识:学生姓名+“正在学习”:
public class Student /*extends Object*/{
public String name;
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void study(){
System.out.println(name+'正在学习');//方法签名
}
}
哪些公司能提供股票交易接口,接口的格式
public interface Student {//定义哪些公司能提供股票交易接口,接口用interface而不是class
//常量
//哪些公司能提供股票交易接口,接口中的属性默认是 public static final,且只能是该格式
public static final String NAME = '名字啊';
//抽象方法
//哪些公司能提供股票交易接口,接口中的抽象方法默认是public abstract,且只能是该格式
public abstract void study();
}
然后写一个大学生类继承学生类同时新写入一个printName类,调用父类Student的getName方法,同时重写父类study方法并标识:
public class UNStudent extends Student{
private int age;
public UNStudent(){
//super(a);
System.out.println('UNStudent');
}
public void printName(){
System.out.println('名字:'+getName()+' 年龄:'+age);
}
public void study(){
System.out.println('大学生'+name+'正在学习');
}
}
同时主函数在创建对象的时候,因为UNStudent的构造函数带有参数,所以创建对象必须带有参数:
因为哪些公司能提供股票交易接口,接口中方法默认public,所以即使哪些公司能提供股票交易接口,接口里没有写public,实现的时候一定要加上pbulic
ustudy();
}
关于super():
转型的结果
继承
继承中的转型
发生在有继承关系的两个类之间
一个类只能继承一个类,不能继承多个,但是能多层次继承
子类在继承父类的时候,不能减小方法的可访问范围
当我们的父类没有写构造方法时,系统会默认替我们自动生成一个没有带任何参数的构造方法,当该父类被继承之后,系统也会在子类的构造函数的第一行加一个super(),也就是说系统在构造子类对象的同时会先构造父类对象,但是当我们的父类对象是自己写的且带有参数的时候,系统没有办法帮我们生成一个super(),我们必须手动输入super(参数参数2……),这些参数可以是具体的数字或字母也可以是一个由子类构造函数参数或者属性所代表的字母或字符串。
unst.study();
文章为作者独立观点,不代表股票交易接口观点