「java父亲」java父类怎么写
本篇文章给大家谈谈java父亲,以及java父类怎么写对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 继承父类 是会先执行父类吗
- 2、JAVA的父类中是不是一定要有无参数的构造方法?为什么我不在父类中写空参数的构造方法就不能编译通过呢
- 3、java什么是继承?什么是父类?什么是子类?
- 4、java计算父亲节
- 5、java父子类转换问题
- 6、JAVA的单继承中允许一个父类有多个子类吗?
java 继承父类 是会先执行父类吗
java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。
public class FatherTest {
private String name;
FatherTest(){
System.out.println("--父类的无参构造函数--");
}
FatherTest(String name){
this.name=name;
System.out.println("--父类的有参构造函数--"+this.name);
}
static{
System.out.println("--父类的静态代码块--");
}
{
System.out.println("--父类的非静态代码块--");
}
public void speak(){
System.out.println("--父类的方法--");
}
}
加入一个main程序后
public static void main(String[] args) {
System.out.println("--父类主程序--");
FatherTest father=new FatherTest("父亲的名字");
father.speak();
}
执行结果为:
--父类的静态代码块--
--父类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法—
可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。
如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。
public class SonTest extends FatherTest {
private String name;
static{
System.out.println("--子类的静态代码块--");
}
{
System.out.println("--子类的非静态代码块--");
}
SonTest(){
System.out.println("--子类的无参构造函数--");
}
SonTest(String name){
this.name=name;
System.out.println("--子类的有参构造函数--"+this.name);
}
@Override
public void speak(){
System.out.println("--子类Override了父类的方法--");
}
}
然后再加入一个main函数
public static void main(String[] args) {
System.out.println("--子类主程序--");
FatherTest father=new FatherTest("父亲的名字");
father.speak();
SonTest son=new SonTest("儿子的名字");
son.speak();
}
执行结果为:
--父类的静态代码块--
--子类的静态代码块--
--子类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法--
--父类的非静态代码块--
--父类的无参构造函数--
--子类的非静态代码块--
--子类的有参构造函数--儿子的名字
--子类Override了父类的方法--
加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。
JAVA的父类中是不是一定要有无参数的构造方法?为什么我不在父类中写空参数的构造方法就不能编译通过呢
这个问题呢是这样的,当我们创建一个类的时候,如果我们没有创建一个构造方法(哪怕是无参数的)。JVM会帮助我们创建一个默认的构造方法,也称为无参构造方法。但是如果我们创建一个构造方法时,JVM就不会再为我们生成一个默认的构造方法。有时有必要的显示的写出这个默认构造函数,也就是无参构造函数。所以当这个类被继承时,子类就会默认的调用这个无参构造方法。
如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写无参构造方法,那么在子类的构造方法中必须显示的调用父类中的有参数的构造方法(写在第一句)。
java什么是继承?什么是父类?什么是子类?
1、继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
2、有继承关系的类才能分出哪个是父类,哪个是子类,继承用extends关键字,extends后面的类则表示父类,extends前面的类则是子类。在java中所有的类都默认继承Object类,Object类是所有类的父类。
3、直接继承Object的类可以称之为Object的子类,间接继承Object的类可以称之为object的间接子类,object则是它的间接父类或者超类。
示例:
public class Parent{
}
public class Child extends Parent{
}
对Parent、Child来说有继承关系,则Parent是Child的父类,Child是Parent的子类。由于Parent、Child都默认继承Object类,所有Parent、Child都是Object的子类。
java计算父亲节
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class TestCalender
{
public static void main(String[] args)
{
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
for(int i=2000;iyear+1;i++)
{
System.out.println(getDate(i,6,3,0));
}
}
public static String getDate(int year,int month,int weekOfmonth,int dayofweek)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
//得到当年当月1号的日子
c.set(year, month-1, 1);
//得出当年当月1号是星期几(日,一,二,三,四,五,六)
//周日是1
int weekday = c.get(Calendar.DAY_OF_WEEK);
//计算该月总天数
int countDay = 0;
if(weekday==1)
{
countDay = (weekOfmonth-1)*7 + dayofweek+1;
}
else
{
countDay = (weekOfmonth-1)*7 + 7-weekday+1 + dayofweek+1;
}
c.set(Calendar.DAY_OF_MONTH, countDay);
String dateStr = sdf.format(c.getTime());
return dateStr;
}
}
java父子类转换问题
先别看父子,因为现实中总是任务父亲比儿子厉害。
而在类中, 儿子有可能比父亲厉害(比如S比F多了一个sonMethod方法),儿子能做的事情,父亲有可能不能做。
new S()的时候, 在内存中创建了一段代码。 这段代码有S的全部功能。
因为S从F继承,就是说 F的功能,S都有。 所以 F f = new S(),可以成立。
现在 在内存有一个变量,叫 f,他保存new S()的时候的内存中创建的那段代码的地址。
他有 F的全部功能(y因为他声明的类是 F)。
然后 进行 S s = (F)f; 我们知道, S的功能,F有可能有。 所以编译器允许你这样操作。
然后,就把 f 里保存地址,放到s里。 这样,s其实指向的就是new S()的时候在内存中创建的那段代码。
1,编译器检查通过
2, 没有变化,只是在内存中加了一个变量s,里面保存的和 f 同样的地址。 此时 f 是 f,是F类;
s 是 s ,是S类。 他们不搭杠。
3,里面保存的值 是一样的, 但是是2个对象。就是2个不同的口袋,装了相同的东西。
4., 因为f 是F, 要调用S的方法, F不一定有。 你可以理解为 F是个小口袋,S是套在F外面的大口袋。 S里的东西,F不一定有; F里的东西,一定也在S里。、
注意大小写。
JAVA的单继承中允许一个父类有多个子类吗?
一个父类可以有多个子类,比如你的爸爸可以有多个孩子,但是【你只能有一个爸爸】
也就是说,【一个子类,只能属于一个父类】!不能有多个"父亲",而【在C++中这是可以的】!
而接口定义了一类方法,用来在不同的类别中去实现共同的方法.
比如说在某个接口中定义了一个方法叫
void
getUp()
//起床
那么现在有一个类叫person类(人类当然可以使用起床这个方法了)
现在又有一个类叫bird类(鸟类也有睡觉,和起床这种方法)
但是你能让鸟类去继承人类吗????
答案补充
正确!
单继承,有个"单"字
,
这么记就好了,单就说明继承某个父类的时候,只能继承一(单)个
关于java父亲和java父类怎么写的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。