Java基础——构造方法、静态和继承

构造方法

构造方法
  1. 概述:在创建一个对象时,构造方法可以给对象中的属性初始化
  2. 别名:构造器 构造函数
  3. 格式:
	修饰符 方法名(参数列表){
	    方法体语句;
	}
  1. 说明:
    (1)修饰符:public
    (2)方法名:和类名一模一样
    (3)参数列表:要和那些属性赋值,就定义那些变量
    (4)方法体语句:给属性赋值的操作
  2. 特点:
    (1)构造方法是在创建对象时,由虚拟机默认调用
    (2)构造方法不能自己手动调用
    (3)一个对象只能调用一次构造方法
注意事项
  1. 如果类中没有定义任何构造方法,系统默认提供一个空参构造

  2. 如果在类中定义个任意一个构造方法,系统不再提供另外一个

  3. 一般在类中既要提供空参构造,也要提供有参构造(利用方法的重载)
    如果在创建对象时,传递参数,就会默认调用有参构造给属性赋值
    如果在创建对象时,不传递参数,就会默认调用空参构造

     public class Person {
     	String name;
     	int age;
     	public Person() {
     		super();
     		// TODO Auto-generated constructor stub
     	}
     	public Person(String name, int age) {
     		super();
     		this.name = name;
     		this.age = age;
     	}	
     }
    
		public static void main(String[] args) {
			Person p = new Person("张三",18);
		}

静态

静态的好处
  1. 如果没有静态:
    某个类型的每一个对象中,都有一个相同的属性值,就需要在每一个对象中给这个相同 的属性值,都开辟一段空间来进行存储。
  2. 有静态:
    如果某个类型中的每一个对象中都有一个相同的属性值,可以将该属性定义为静态
    一旦定义为静态之后,该静态变量就在方法区中开辟空间存储数据
    好处:
    (1)解决堆内存空间
    (2)如果需要赋值或者需要修改只需要操作一次即可,数据维护起来比较容易
静态的特点
  1. 静态使用 static 关键字来表示
  2. 静态变量是随着类的加载就存在
  3. 静态变量是在对象的创建之前就已经存在,可以被访问
  4. 某个类型中的静态变量可以被该类所有对象所共享
  5. 静态可以被类名直接调用,也可以被对象调用
静态方法
  1. 静态方法:通过static修饰的方法就是一个静态方法
  2. 跟静态特点相同:
  3. 注意事项:
    (1)静态方法不能访问非静态变量,可以访问静态变量
    静态方法随着类的加载就可以被调用,这时对象可能还没创建,对象没创建,非静态变量就还没有存在,没有存在,就不能被访问。
    (2)静态方法中不能调用非静态方法
    因为非静态方法可以访问非静态变量,如果静态方法可以访问非静态方法,就相当于静态方法可以间接的访问非静态变量,和第一点矛盾。
    (3)静态方法中不能存在this关键字
    this表示当前对象,静态方法可以被调用的时候,对象可能还没创建,this不知道指向哪一个对象
  4. 总结:静态不能访问非静态
静态变量和非静态变量的区别
  1. 所属不同:
    静态变量:属于类
    非静态变量:属于对象
  2. 存储的空间不同:
    静态变量:随着类的加载存在,在方法区中存储
    非静态变量:在堆内存中存储
  3. 生命周期不同:
    非静态变量:随着对象的创建存在,随着对象的回收消失
    静态变量:随着类的加载存在,随着类的字节码对象回收
  4. 调用方式不同:
    静态变量既可以通过类名调用,也可以通过对象调用
    非静态变量只可以通过对象调用

继承

继承
  1. 概述:面向对象三大特征之一,让类和类之间产生子父类的关系
  2. 关键字:extends
  3. 子类:用于继承其他的类 派生类
  4. 父类:被其他类继承的类 基类 超类
  5. 继承的好处:
    (1)减少代码的冗余量
    (2)提高代码的复用性
    (3)提高代码的可维护性
  6. 缺点:
    提高了类之间的耦合性
    耦合性:类之间的关联
  7. 效果:子类继承父类之后,父类的一些内容,子类可以继承,可以使用
继承的注意事项
  1. 父类中定义的私有变量和私有方法,子类不能继承
    父类的私有成员变量,在子类中不能直接访问、使用
    虽然父类的私有变量子类不能直接访问,但是可以使用继承而来的公共访问方法去间接的访问。
  2. 父类中的构造方法,子类也不能继承
    原因1:
    父类的构造方法名字应该和父类的类名保持一致
    子类的构造方法名应该和子类的类名保持一致
    如果子类继承了父类的构造方法,那么子类的构造方法名就不能喝类名保持一致
    原因2:
    父类的构造方法是用于给父类的成员变量初始化赋值
    子类的构造方法用于给子类的成员变量初始化赋值
    如果子类继承父类的构造,子类中定义的特殊属性,就不能使用构造赋值
  3. 使用继承需要遵循两个原则:
    原则1:
    父类中应该定义的是一些公共内容
    如果子类有特殊内容,可以在子类中单独定义
    原则2:
    子类必须是父类的一种
this和super关键字
  1. this:当前对象,哪个对象调用this所在的方法,表示哪一个对象

  2. super:当前对象中父类的对象

  3. 访问的内容:
    this可以访问本类对象中的属性
    super可以访问本类对象中父类对象的属性
    this可以访问本类对象所属类型的方法
    super可以访问本类对象父类对象所属类型的方法
    this()表示访问本类的构造方法
    super()可以访问父类的构造方法

     class Fu{
     	int i = 10;
     }
     class Zi extends Fu{
     	int i =1000;
     	public void get(int i) {
     		System.out.println(i);//1000就近原则
     		System.out.println(this.i);//1000当前对象
     		System.out.println(super.i);//10当前对象中父类的对象
     	}
     }
    
方法的重写
  1. 引入:
    父类中定义了一个方法,子类需要这个功能,但是不想使用父类中定义的实现内容

  2. 解决:
    可以正常继承父类的方法,但是可以将父类的内容进行修改,这就是方法的重写

  3. 重写:
    在子父类中,方法的名字相同,参数列表相同,返回值类型也相同,方法体语句可以不同。
    4、要检测一个方法是否是重写,可以使用一个注解:
    @Override
    在重写的方法上加上注释,如果不报错,表示当前方法是重写的父类方法
    如果加上注释之后,方法编译报错,表示此方法不是重写的

     class Fu{
     	public void work() {
     		System.out.println("工作");
     	}
     }
     class Zi extends Fu{
     	@Override
     	public void work() {
     		System.out.println("读书");
     	}
     }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值