金R奋斗日记の初学者入门第二课→ →
继第一堂课之后 这节课真的是拖的有点久啦 。
今天有点不在状态以至于被老师问了几个问题都回答得奇奇怪怪的
让我边听大悲咒边忏悔把 = =
(PS:在写完课堂整理之后我会贴一道有意思的面试题,骚年们,要是你 你能答对么? >< )
下面进入正题:
第一节课讲了类和对象之后,这节课自然开始讲类的继承
(接 金R奋斗日记の菜鸟入门第一课→ →)
6.类的继承
思考:为什么需要继承?
学生
大学生
XX大学学生
1>.类是对象共同点的描述
2>.自动转型和强制转型
{子类继承父类的时候: 可向上转型 : 自动转型:子类的对象的类型可以自动转成父类型。
不可向下转型:强制转型:将父类对象强制转成子类类型,
向下转型的条件是:只有当对象本身的类型是这个子类类型的时候才能强制转型 。
如:父类:Student , 子类:UNStudent
Student stu = new Student();
Student stu1=new UNStudent(); -----这是可以的
UNStudent stu2=new Student(); -----这是不行的
但是:UNStudent stu3=(UNStudent)stu2; -----这也是可以的(符合条件的强制转型)
}
{
1.子类会继承父类的属性和方法
2.子类可以定义自己特有的属性和方法
3.子类可以重写从父类继承来的方法
重载:方法名相同,参数不同,且是发生在同一个类中。
重写:方法的定义和参数一样,方法体不一样。一般是在继承中用到。
}
3>.关于子类特有的方法的调用
子类特有的属性和方法,只能是子类类型的对象才能调用
一个对象声明的是什么类型,就只能调用这个类型中定义了的方法及其父类中定义的方法
如果一个对象被自动转型成了父类类型的对象之后还需要调用子类特有的方法,则又需要强制转型转回来。
4>.关于子类重写方法的调用
对象是调用父类的方法还是子类重写的方法,取决于new的时候new的是什么
5>.在调用子类的构造方法的时候,会先调用父类的构造方法
6>对.多态的理解
程序举例如下:
先创建了一个Student类
public class Student { public Student(){ System.out.println("student"); } //构造方法 protected String name; public void setName(String name){ this.name=name; } public void study(){ System.out.println(name+"在学习"); } }
创建一个UNStudent类继承Student类
public class UNStudent extends Student { public UNStudent(){ //这里省略了 super(); 首先会调用父类的构造方法 System.out.println("UNStudent"); } public void CET4(){ System.out.println(name+"是大学生,需要考四级!"); } //子类特有的方法 public void study(){ System.out.println(name+"是大学生,学习靠自己!"); } //重写父类的方法 }
调用
public class manage { // 多态:由于继承和重写机制,相同类型的对象,调用相同的方法,得到的结果可能不一样 public static void main(String args[]) { Student stu = new Student(); stu.setName("张三"); stu.study(); UNStudent stu2 = new UNStudent(); stu2.setName("李四"); // 如果子类重写了继承来的方法,则子类对象会调用重写之后的方法 stu2.study(); stu2.CET4(); // (向上转型)自动转型 Student stu3 = new UNStudent(); stu3.setName("王五"); // 对象是调用父类的方法还是子类重写的方法,取决于对象本身的类型 stu3.study(); // 子类特有的属性和方法,只能是子类类型的对象才能调用 // stu3.CET4(); 出错 !! // (向下转型)强制转型 // 只有当对象本身的类型是这个子类类型的时候才能强制转型 UNStudent stu4 = (UNStudent) stu3; stu4.study(); stu4.CET4(); } }
运行结果:
student
张三在学习
student
UNStudent
李四是大学生,学习靠自己!
李四是大学生,需要考四级!
student ——————————————————————(说明先调用了父类的构造方法~)
UNStudent
王五是大学生,学习靠自己!
王五是大学生,学习靠自己!
王五是大学生,需要考四级!
你们猜对了吗? 反正运行之前老师问我我没答对
接下来稍稍讲了一下接口:
接口:非常抽象的一个类
接口中的属性:属性只能是常量
接口中可以有方法:都是抽象方法
方法默认是public abstract的 ,而且也必须是的 。方法没有方法体。
接口没有构造方法,不能创建对象
* 接口的作用:1,作为类型 ;2.充当父类,可子类继承
{
子类在实现接口的时候必须要重写接口里面的所有方法
}
------------------------------------------------------------------------------------------------------------------------------------
1.java中的继承是单根继承,一个子类只能继承一个父类
public class A{}
public class B extends A{}
2.一个类可以实现多个接口(必须要实现所有接口的方法)
public interface C{}
public interface D{}
public interface E implements C,D{}
3.接口可以继承多个接口(不需要实现方法)
public interface F extends C,D{}
4.一个类可以在继承一个类之后,再实现多个接口
public class G extends A implements C,D{}
(A,C,D都是G的父类,但是C,D不是A的父类 A,C,D是平级的)
**********************************************************************************************************************************
今天我是写完了作业再来写博客的喔。>< ><
好了,
说了这么多 感觉重头戏是下面这道面试题才对哈哈~
来咯
题:
public class Test {
public int aa(){
static int i=0;
i++;
return i;
}
public static void main(String[] args) {
Test test=new Test();
test.aa();
int j=test.aa();
System.out.println(j);
}
}
(答案 就先不公布啦,我觉得挺有意思的一道题。还是。。。。 我太小看你们了? )
不妨留言告诉我你的答案啦 ~~~~
好啦,今天到这。
GN,ITeye。
木有回答那个面试题。。。。
这就是一个陷阱
这就是我说的 有意思的地方 。
这就是出题者的意思呐。 其实答案不是1也不是2 。