《java入门第一季》之面向对象(继承总结)
继承已经全部写完了,接下来通过几个案例对继承问题做一个总结:
/*
看程序写结果:
A:成员变量 就近原则
B:this和super的问题
this访问本类的成员
super访问父类的成员
C:子类构造方法执行前(默认)先执行父类的无参构造方法
D:一个类的初始化过程
成员变量进行初始化
默认初始化
显示初始化
构造方法初始化 结果:
fu
zi
30
20
10
*/
class Fu{
public int num = 10;
public Fu(){
System.out.println("fu");
}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
//super();此时默认含有super();调用父类的无参构造方法。这里其实先进行分层初始化
System.out.println("zi");
}
public void show(){
int num = 30;
System.out.println(num); //30
System.out.println(this.num); //20
System.out.println(super.num); //10
}
}
class ExtendsTest {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
/*
学生案例和老师案例讲解 学生:
成员变量;姓名,年龄
构造方法:无参,带参
成员方法:getXxx()/setXxx()
老师:
成员变量;姓名,年龄
构造方法:无参,带参
成员方法:getXxx()/setXxx() 看上面两个类的成员,发现了很多相同的东西,所以我们就考虑抽取一个共性的类:
人:
成员变量;姓名,年龄
构造方法:无参,带参
成员方法:getXxx()/setXxx() 学生 继承 人
老师 继承 人
*/
//定义一个人类
class Person{
//姓名
private String name;
//年龄
private int age;
public Person(){
}
public Person(String name,int age){//杨道龙,24
this.name = name;
this.age = age;
} 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;
}
}
class Student extends Person{
public Student(){//无参构造
}
public Student(String name,int age){//必须有参构造//杨道龙,24
/*this.name = name;
this.age = age;*///错误,私有的成员变量无法访问
super(name,age);//去找父类中的有参构造,并把值传递过去
} }
class Teacher extends Person{
public Teacher(){
}
public Teacher(String name,int age){
super(name,age);
}
} class ExtendsTest4{
public static void main(String[] args){
//方式一
Student s1 = new Student();
s1.setName("杨道龙");//对象调用方法。先在子类中找,找不到再去父类中找
s1.setAge(24);//对象调用方法。先在子类中找,找不到再去父类中找。其实是赋值给了子类继承后的方法中了。
System.out.println(s1.getName()+"----"+s1.getAge());
//方式二
Student s2 = new Student("杨道龙",24);
System.out.println(s2.getName()+"----"+s2.getAge());//对象调用方法,先在子类中找,找不到,再去父类中找。继承关系 //创建老师测试对象
//方式一:
Teacher t1 = new Teacher();
t1.setName("孙晓晓");
t1.setAge(23);
System.out.println(t1.getName()+"----"+t1.getAge());
//方式二
Teacher t2 = new Teacher("孙晓晓",23);
System.out.println(t2.getName()+"----"+t2.getAge()); }
}
/*
猫狗案例讲解 先找到具体的事物,然后发现具体的事物有共性,才提取出一个父类。 猫:
成员变量:姓名,年龄,颜色
构造方法:无参,带参
成员方法:
getXxx()/setXxx()
eat()
palyGame()
狗:
成员变量:姓名,年龄,颜色
构造方法:无参,带参
成员方法:
getXxx()/setXxx()
eat()
lookDoor() 共性:
成员变量:姓名,年龄,颜色
构造方法:无参,带参
成员方法:
getXxx()/setXxx()
eat() 把共性定义到一个类中,这个类的名字叫:动物。
动物类:
成员变量:姓名,年龄,颜色
构造方法:无参,带参
成员方法:
getXxx()/setXxx()
eat() 猫:
构造方法:无参,带参
成员方法:palyGame()
狗:
构造方法:无参,带参
成员方法:lookDoor()
*/
//定义动物类
class Animal {
//姓名
private String name;
//年龄
private int age;
//颜色
private String color; public Animal() {} public Animal(String name,int age,String color) {
this.name = name;
this.age = age;
this.color = color;
} 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 String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public void eat() {
System.out.println("不要睡了,该吃饭了");
}
} //定义猫类
class Cat extends Animal {
public Cat() {} public Cat(String name,int age,String color) {
super(name,age,color);
} public void playGame() {//猫特有的方法,动作
System.out.println("猫玩英雄联盟");
}
} //定义狗类
class Dog extends Animal {
public Dog() {} public Dog(String name,int age,String color) {
super(name,age,color);
} public void lookDoor() {
System.out.println("狗看家");
}
} //测试类
class ExtendsTest5 {
public static void main(String[] args) {
//测试猫
//方式1
Cat c1 = new Cat();
c1.setName("Tom");
c1.setAge(3);
c1.setColor("白色");
System.out.println("猫的名字是:"+c1.getName()+";年龄是:"+c1.getAge()+";颜色是:"+c1.getColor());
c1.eat();
c1.playGame();
System.out.println("---------------"); //方式2
Cat c2 = new Cat("杰瑞",5,"土豪金");
System.out.println("猫的名字是:"+c2.getName()+";年龄是:"+c2.getAge()+";颜色是:"+c2.getColor());
c2.eat();
c2.playGame(); //作业:测试狗
//方式一
Dog d1 = new Dog();
d1.setName("皮毛");
d1.setAge(5);
d1.setColor("黑色");
System.out.println("狗的名字是"+d1.getName()+",他今年"+d1.getAge()+"岁了,它的颜色是:"+d1.getColor());
d1.eat();
d1.lookDoor();
//方式二
Dog d2 = new Dog("皮毛2",4,"白色");
System.out.println("狗的名字是"+d2.getName()+",他今年"+d2.getAge()+"岁了,它的颜色是:"+d2.getColor());
d2.eat();
d2.lookDoor();
}
}
《java入门第一季》之面向对象(继承总结)的更多相关文章
- JAVA入门第一季(mooc-笔记)
笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...
- Java入门第一季——从此投身Java??
找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季 一.简 ...
- 《java入门第一季》之面向对象(谈谈接口)
软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...
- Java入门第一季
慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...
- 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)
根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...
- 《java入门第一季》之面向对象面试题(继承中构造方法的关系)
/* 继承中构造方法的关系 A:子类中所有(子类的有参和无参)的构造方法(默认都会访问父类)中(空参数)的构造方法,默认访问父类空参数构造,不默认访问有参数构造 B:为什么呢? 因为子类会继承父类中的 ...
- 《java入门第一季》之面向对象(重头戏继承来了)
java特性封装.继承.多态.之前对封装做了简单描述(见http://blog.csdn.net/qq_32059827/article/details/51312116),今天分析另一个特性继承性: ...
- 《java入门第一季》之面向对象(继承)
/* 继承的注意事项: A:子类只能继承父类所有(非私有)的成员(成员方法和成员变量),私有的变量和方法没法继承 B:子类(不能)继承父类的(构造方法),但是可以通过super关键字去访问父类构造方法 ...
- 《java入门第一季》之面向对象(this和super详细分析)
此文章来自于书籍,里面介绍了this和super详细的区别.当然在后边的文章中还有涉及super的时候还会分析. Java关键字this.super使用总结 一.this Java关键字this只能用 ...
随机推荐
- Spinner控件详解
Spinner控件详解 效果图 修改Spinner样式 在介绍之前,先看一下系统原生的样式 6.x & 5.x系统样式 4.x系统样式 官方文档 XML属性 方法 描述 android:dro ...
- 基于hadoop的BI架构
BI系统,是企业利用数据驱动运营的一个典型系统.BI系统通过发掘企业运行过程中的数据,发现企业的潜在风险.为企业的各项决策提供数据支撑. 传统的BI系统通常构建于关系型数据库之上.随着企业业务量的增大 ...
- HOG OpenCV 代码片段
直接上代码: #include <opencv2/opencv.hpp> using namespace cv; #include <cmath> using namespac ...
- Unity UGUI图文混排(七) -- 下划线
之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间. 先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文 ...
- 一个貌似比较吊的递归转换为loop--总算成功了.
class Stack(object): """ A class to hold arguements and state data. """ ...
- 使用Intent传递对象
Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActi ...
- Dynamics CRM2013 在Visual Studio中开启脚本的Xrm.Page智能提示
前面篇博文http://blog.csdn.net/vic0228/article/details/49663751提到了通过引用XrmPage-vsdoc.js文件来启用Xrm.Page的智能提示, ...
- JDBC编程-优化程序(六)
首先完成DTO类的编写 DTO类是data tranfer object也就是数据传输类,DTO主要用于数据的传输操作,其中包含属性值,以及构造方法和getter ,setter方法等,不会包含业务逻 ...
- 多线程之Java线程阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ...
- (九十七)集成JPush实现远程通知和推送的发送
上节介绍了通过直接和APNS交互实现推送的方法,较为繁琐,最为重要的是发送推送需要特定的服务端,通过JPush,不仅可以简化客户端的接收,还可以通过控制台或者API实现通知的发送. 首先注册JPush ...