8、java高级面向对象-重载、构造器重载、初始化块、this、super、对象构造和初始化分析、覆盖、toString
1、方法的重载(overload)
同一个类中同时存在一个以上的同名函数,参数个数或类型不同或顺序不同,称为方法的重载。
和返回值无关!
构造器重载:非默认构造器和默认构造器其实就是方法的重载。
2、this:这个,指对象,真实存在的。 类——>实例化——>对象
this的三种用法:
1、在类本身的方法中或构造器中引用该类的实例变量和方法;
public A(){
this.name="Mike";
this.ok() ;
}
2、将当前对象作为形参或返回值传递给其他方法或构造器 return this;(返回自己,可以始终使用自己本身对象(对象的属性值不会随返回new成初始值)进行调用)
public String getName() {
return this.name;
3、用来调用其他的重载的构造器 this()(只能在构造器的第一条使用,写在其他地方不好使) 用来改变使用构造器的顺序。
public A(){
this(100);
}
public A(int age){
this.age=age;
}
链式构造器:
public Person1(){
System.out.println("构造器Person1()被调用");
sex ="Male";
age=20;
name="mike";
System.out.println("name="+name+" age="+age+" sex="+sex);
}
public Person1(String theName){
//调用本身的默认构造器Person()
this();//this用来调用默认的构造器
System.out.println("构造器Person1(String theName)被调用");
name = theName;
System.out.println("name="+name+" age="+age+" sex="+sex);
}
public Person1(String theName,int theAge){
//调用本身的非默认的构造器Person(String theName)
this(theName);
System.out.println("构造器Person1(String theName,int theAge)被调用");
age = theAge;
System.out.println("name="+name+" age="+age+" sex="+sex);
}
public static void main(String []args){
Person1 person=new Person1("asd",18);
}
3、super:对象 类——>实例化——>对象:指父类对象。
两种用法:
1、用于访问父类中定义的属性,成员方法(当重写父类方法后,想调用父类方法,必须使用super,因为重写后的方法把父类的方法掩盖了)
public class C extends C0{
public void bark(){
super.go();
}
public void go(){
System.out.println("C-go");
}
public static void main(String[] args) {
new C().bark();
}
}
class C0{
public void go(){
System.out.println("C0-go");
}
}
2、 用于在子类构造器中调用父类的构造器。(也必须是第一句且放在构造器中)
super的追溯不仅限于直接父类:即不能够使用super.super.方法()的用法来调用爷爷类中的方法,可以在父类中新创建一个方法用来调用爷爷类中的方法,或者破坏父类方法,让其中的同名方法跳到爷爷那儿。
public class D extends D0{
public static void main(String[] args) {
// new D().go();
new D().to();
}
void go(){
System.out.println("go");
}
}
class D0 extends D00{
void to(){
super.go();
}
void go(){
//super.go();
System.out.println("0-go");
}
}
class D00{
void go(){
System.out.println("00-go");
}
4、动态初始化块block{}
位置:类的里面,与构造器、方法、属性同地位
运行顺序:初始化块先执行——>然后执行构造器
特点:先于构造器执行,必须实例化才能执行。
5、覆盖(override):重写
子类中的方法必须和父类中的方法名字,参数类型,返回值完全相同时,才可以重写。
子类的权限不能比父类权限更严格。(父类不能为私有的)
静态不能重写。
6、权限:
private:私有的:仅能在自己的类中进行调用。
[default]:默认:当子类继承父类,实例化子类的时候,跨包不能使用
protected:保护的:当子类继承父类,实例化子类的时候,跨包能使用
public:公共的:可以在任何包中 任何类中进行调用
7、toString()方法
正常的toString方法返回的是没用的栈地址
一般我们对其进行重写:因为他是Object下的方法,所有类的所有对象都可以调用toString方法,这样我们输出对象时返回的就是toString方法中的输出内容,而不是一个地址了。
8、java高级面向对象-重载、构造器重载、初始化块、this、super、对象构造和初始化分析、覆盖、toString的更多相关文章
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- Java 基础 面向对象之关键字内部类代码块修饰符
final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...
- Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)
本文链接 http://blog.csdn.net/xiaodongrush/article/details/29170099 參考文章 http://my.oschina.net/le ...
- java中初始化块、静态初始化块和构造方法
(所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...
- Java面向对象之初始化块
目录 Java面向对象之初始化块 普通初始化块 静态初始化块 初始化块与构造器 Java面向对象之初始化块 在程序设计中,让数据域正确地执行初始化一直是一个亘古不变的真理. 那么,有哪些手段可以初始化 ...
- Java学习 面向对象(下)——Java疯狂讲义th4
面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...
- Java初始化块
1.使用初始化块 [修饰符]{ //初始化块的可执行性代码 } 初始化块虽然也是Java类的一种成员,但它没有名字,也就没有标识,因此无法通过类.对象来调用初始化块.初始化块只在创建Java对象时隐式 ...
- Java的初始化块及执行过程详解
问题:Java对象初始化方式主要有哪几种?分别是什么?针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式. 还有一种与构造器作用非常相似的是初始化块, ...
随机推荐
- HTML5 基础测试题
HTML5 基础测试题 1.HTML5 之前的 HTML 版本是什么?() A.HTML 4.01 B.HTML 4 C.HTML 4.1 D.HTML 4.9 2.HTML5 的正确 d ...
- WinServer-PowerShell基础
命令的参数: [-name] 这个参数必须要有,string表示name参数接受什么样的实参,<>表示参数可以接受的实参类型,通常出现set get add都会伴随着必须参数 [-name ...
- jQuery调用WebService ( 同源调用)
转自原文 jQuery调用WebService 1.编写4种WebService方法 [WebService(Namespace = "http://tempuri.org/&quo ...
- jdk1.8Option类
目的:为了解决一个方法返回的参数可能为空而无法传入到新的方法做参数的问题,java8产生了新的内容:Option. 定义:Option是一个可以为空的容器对象(注意本质上是个万能对象). 常用方法:1 ...
- crm操作报价单实体
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft ...
- Http抓包工具--查尔斯
查尔斯 查尔斯:http://www.charlesproxy.com/ 这是比較好用的抓包工具.有Mac.Windows.Linux版本号.能够相应用程序.浏览器.手机.手机模拟器进行抓包. 官方站 ...
- php设计模式之责任链模式
php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...
- Linux命令locate
centos安装locate命令 centos6.3刚初始化安装完毕,有个配置文件不知道存在什么地方,想用locate命令来查找下,发现系统提示,找不到该命令.以前经常用的命令为什么找不到了呢???原 ...
- Linux基础01
** 一些老生常谈的问题 一提起Linux,行业内无人不知<鸟哥私房菜>,就是放在胸口可以防弹的那种书,虽说经典.全面,但对于初学者而言,确实过于厚重,而且容易学着后边忘了前边,毕竟实际操 ...
- FPGA之阻塞赋值与非阻塞赋值
Verilog语言中讲的阻塞赋值与非阻塞赋值,但从字面意思来看,阻塞就是执行的时候在某个地方卡住了,等这个操作执行完在继续执行下面的语句,而非阻塞就是不管执行完没有,我不管执行的结果是什么,反正我继续 ...