7继承,覆盖,this super
来源:互联网 发布:json 空值 编辑:程序博客网 时间:2024/04/29 14:25
/*
继承:
1.提高代码的复用性
2.让类与类之间产生关系,有了这个关系才有了多态的特性。
注意:千万不要为了获取其他类的功能,简化代码而继承。
必须是类与类有所属关系才可以继承,所属关系叫is a,谁是谁中的一员
(父类的由来是有子类不断抽取出来的,猫跟人能继承吗,当然不能,但是可以向上抽取他们的共性形成一个类,比如说都能吃,都能睡)
java语言中,只支持单继承,不能多继承,一个类只能继承一个父类,
因为多继承容易带来安全隐患。当父类中定义了相同功能,但功能内容不同时,多继承就会分不清继承哪一个。
但是java保留了这种机制,并用另一种体现形式来完成表示,多实现。
eg:
clsaa A
{
void show()
{
S.o.p("a");
}
}
clsaa B
{
void show()
{
S.o.p("b");
}
}
clsaa C extend,A,B;
{}
C c=new c();
c.show();
问,c都集成了a,b,这样调用输出什么?所以有安全隐患。
*/
/*
java支持多层继承,eg。A继承B,B继承C
也就是一种继承体系,如何使用继承体系中的功能呢?API
先要使用体系,先查阅父类的描述,因为父类中定义的是该体系中的共性,
通过了解共性功能,都可以知道该体系的基本功能
那么这个体系已经可以基本使用了。
那么在具体调用时,要创建最子类的对象,因为1有可能父类不能能闯将对象eg:抽象类。
2是,创建子类可以使用更过的功能,包括基本的也包括特有的
简单一句话,查阅父类功能,创建子类对象使用功能。
*/
class Student
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
/*事物和事物不光只有继承关系。
聚集:has a
聚合:球队中少了一个球员没关系
组合:(紧密联系程度更高)人少了心脏,
*/
——————————————————————————————————子父类中变量的变化
/*
子父类出现后,类成员的特点
类中成员
1,变量
2,子夫类中的函数
3.构造函数。
1,变量
如果子类中出现非私有的同名成员变量时,下面的num和Fu类中的num重名
子类要访问本类中的变量,用this
子类要访问父类的变量,用super
super的使用和this的使用几乎一致
this代表着对本类对象的引用
super代表着父类对象的引用。
2,函数
当子类出现和父类一摸一样的函数时,
当子类对象调用该函数,只会运行子类函数
如同父类被覆盖一样,(但是父类的方法还在,只不过没运行而已)
这种情况叫覆盖(重写)
当子类继承了父类,沿袭了父类的功能到子类中,但是虽具备该功能,但是功能的内容
却和父类不一样,这时,没有必要新功能,而是使用覆盖特性,而是保留父类的功能定义
而重写功能内容。
一部老手机只可以显示手机号,后来要升级,要显示名字和图片,
不可能去改变一个类中的方法,因为那要修改与之相关的代码。
所以就找个子类去继承他,然后用重写他的那个方法,在里边加上
显示姓名的功能。
注意事项:
1子类覆盖父类,必须保证子类的权限大于等于父类,才可以覆盖,否则变异失败
2,静态只能覆盖静态。
重载:构造函数中,只看函数的参数列表
重载:继承中,子父类方法一摸一样。包括返回值类型
*/
class Fu
{
int num =4;
}
class Zi
{
int num=5;
void show()
{
System.out.println(super.num);//this.num
}
}
class ExtendsDemo2
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
}
}
/*
3,子父类构造函数
在对子类的对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句 super();
super();会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类中的构造函数?
因为父类中的数据可以直接获取,所以子类对象在建立时,需要查看父类中是如何对数据进行初始化的。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定定义在子类的构造函数第一行。
子类的实例化过程:
结论
子类所有的构造函数默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数内的第一行都有一句隐式的super();
当父类中没有空参数的构造函数时,子类必须手动通过super();来访问父类中的构造函数。
——————————————————————————————————————————
/*
final (最终的意思)
1,修饰符,可以修饰类,函数,变量
2.被final修饰的类不可以被继承。(因为继承打破了封装性,为了保持它的封装性用final)
3,被final修饰的方法不可以被复写。(比如说一个类中,他的方法有你需要的,但是也有你不需要的,
这时候怎么办呢?你不用继承这个类,只需要用final吧不需要的方法修饰起来就ok)
4 被final修饰的变量时一个常量,只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。
在描述一些事物时,一些数据的出现时固定的,那么这时候为了增强阅读性,都给这些值起个名字,方便阅读
当这个值不需要改变,所以加上final,比如final double MY—_PI=3.14;常量书写规范,所有字母都大写,如果由多个单词组成,单词间通过_连接。
5,内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
*/
————————————————————————————
/*
当多个类中出现相同功能,但是功能的主体不同,
这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体。
*/
abstract class Student
{
abstract void study();//抽象方法必须定义在抽象类中
}
class BassStudent
{
void study
{
S,o,p("bsse study");
}
}
class AdvStudent
{
void study
{
S,o,p("sdv study");
}
}
/*
抽象:看不懂
抽象类的特点
1,抽象方法一定定义在抽象类中
2,抽象方法和抽象类都必须被absteact修饰
3,抽象类不可以用new创建对象,因为调用抽象方法没意义。抽象方法没方法体。
4,抽象类中的方法要被使用必须由子类复写齐所有的抽象方法后,建立子类对象调用
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
抽象类和一般类没有太大的不同,他里边也可以定义非抽象方法,没什么意义,这仅仅是不能让类建立对象
该如何描述就如何描述,只不过,该事物出现了一些看不懂的东西
这些不确定的功能,需要明确出现,但是无法定义主体,通过抽象方法来表示。
抽象类比一般类多了抽象方法,抽象类不可以实例化。
*/
模板方法设计模式
/接口:初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以用接口的方式来表示
跟定义类差不多,只不过换了interface
接口定义,格式特点
1接口中常见定义:常量,抽象方法
2接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
记住,接口中的成员都是public的
接口:是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口
中的抽象方法全覆盖后,子类才可以实例化,否则子类是个抽象类
/*
Interface Inter
{
public static final int NUM = 3;
Public abstract void show();//抽象方法
}/
class Test implements Inter//接口中的另一种关系,叫实现关系,这就是实现,
{
Public void shou(){}
}
Class InterfaceDemo
{
public static void main(String[] args)
{
Test t = new Text();
String.out.println(t..NUM);
String.out.println(Test..NUM);
String.out.println(tInter.NUM);
}
}
接口的特点:
接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现implement
Eg: class Text implements Inter,InterA//Test类同时实现了两个接口
一个类可以再继承一个类的同时还实现多个接口。
//class Test extends Demo implements Inter,Intera
接口之间可以继承,还可以多继承,因为没有方法体。
/*需求,一个学生类,定义了学生中共有的方法,学习,睡觉等,但是每个人学习的内容都不一样,莫能两可就用抽象定义方法,然后,张三抽烟,但是别人不抽啊,但是张三也学习啊,于是就把抽烟这个方法定义在接口里,张三这个类就既可以继承学生这个父类,有可以通过接口实现抽烟的方法,李四不抽烟,只学习*/
个人总结,一个父类中,大家都一样的活动就正常定义,大家都有的活动,但是活动内容不一样的,就定义成抽象的,让继承他的类自己创建实例去重写去,而大家都没有的活动,但是某个人有的活动,就定义成接口形式。
基本功能
abstract class Student//定义了一个抽象方法,所以他的类是抽象类,
{
abstract void study();//虽然大家都会学习,但是学习的内容不一样呢,定义成抽象的,方便子类调用
void sleep()
{
Systdm.out.println(“sleep”);
}
Interface Smoking//定义成接口,个别学生才会抽烟呢
{
Void smke();
}
class ZhangSan extends Student implements Smoking//张三因为又具有学生的特点,又抽烟,
{
void study(){}
public void Student(){}//所以就继承父类而且实现接口
}
class Lisi extents Student//李四就只继承了学生类
{
}
class
}
- 7继承,覆盖,this super
- 继承 this与super
- 类 继承 super this
- 继承 单继承 多层继承 成员变量:this & super ; 成员函数:覆盖操作; 一个对象实例化过程!!
- Lesson_for_java_day09--继承、实例化、构造方法、覆盖、重载、this关键字、super关键字、全局变量和局部变量
- 继承中的this和super
- java入门7-代码块,继承,this,super
- NO7.java学习笔记【面向对象、栈内存、堆内存、构造函数、this、super、继承、覆盖、对象实例化、final】
- Java中覆盖、继承、重载和多态的详细解说与this和super的用法
- [疯狂Java]面向对象:继承、覆盖、super
- 继承、重载、重写、static、super、this
- super,this,块,继承的应用实例
- 继承,方法重载,方法重写,this,super
- 继承中的初始化,super和this关键字
- 面向对象之继承super(),this()
- 关于继承时隐式参数(this,super)
- Java之继承,super,this详解
- 继承 以及this和super关键字
- SCRT连接到虚拟机ubuntu
- XML介绍
- 点击浏览器后退按钮刷新注册码
- 文件操作 Q&A
- 宏Q_OBJECT
- 7继承,覆盖,this super
- 数据结构_图_邻接表做存储结构实现求无向图的连通分量_C++实现
- CakePHP:多域名缓存
- 【Android】通过PopupWindow实现浏览器风格的下拉菜单
- Linux pipe
- "Java中可复用事件处理的设计与实现"代码
- ubuntu 11系列Unity的bug汇总
- 反省,自悟,求真,务实
- java class文件生成jar包