JAVA方法,类及类的继承,重载、方法重写,super关键字

方法的定义

方法作用

节省重复代码编写,分工合作

格式

修饰符 返回值 方法名(参数列表){
方法体
}

public void show(){
	System.out.println{"这是一个方法"}
}
public class method {

	public static void main(String[] args) {
		// 普通数组遍历
		int[] arr1= {1,2,3,4};
		for(int i=0;i<arr1.length;i++) {
			System.out.println(arr1[i]);
		}
		System.out.println("=========================");
		int[] arr2= {10,9,8,7,6,5};
		for(int j=0;j<arr2.length;j++) {
			System.out.println(arr2[j]);
		}
		//调用自定义遍历数组的方法
		goThrougharr(arr1);
		goThrougharr(arr2);
		

	}
	//自定义方法遍历数组
	public static void goThrougharr(int[] arr) {
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		System.out.println("==============");
	}

}

方法重载

在同一个类中出现了方法名相同,参数列表不同的方法时,我们称之为方法重载
例如:

public int add(int a, int b){
	return a+b;
}
public double add(double a, double b){
	return a+b;
}
public class Overloaded {

	public static void main(String[] args) {
		// 方法重载
		int a=10;
		int b=5;
		int sum1=add(a,b);
		System.out.println(sum1);
		double c=13.5;
		double d=16.5;
		double sum2=add(c,d);
		System.out.println(sum2);
	}
	public static int add(int a, int b) {
		return a+b;
	}
	public static double add(double a, double b) {
		return a+b;
	}

}

面向对象

  • 面向对象:把事情交给对象去完成
  • 面向过程:所有的事情自己亲自去完成;

类与对象

类:模板,一类实物。静态的属性,动态的是方法。
比如:学生,姓名、年龄是属性,学习,睡觉时方法。
对象:类的具体实现,比如张三、李四都是学生类的实现

定义类

public class student { //类
	String name; //类的属性
	int age;
	public void study(String course, int time) { //类的方法
		System.out.println(name+"学习"+course+time);			
	}
	public void sleep(String place) {
		System.out.println(name+"在"+place+"睡觉");
	}
}

创建对象调用类的方法和属性

创建对象格式:对象名= new 类名();
调用属性:对象.属性名称=值;
调用方法:对象.方法名(参数)
输出对象:打印的是地址值

public class CallClass {

	public static void main(String[] args) {
		// 创建对象并调用属性和方法
		Student s1=new Student();
		s1.name="张三";
		s1.age=23;
		System.out.println(s1.name);
		System.out.println(s1.age);
		s1.study("English", 20);
		s1.sleep("教室");
	}
}

构造方法

作用:创建对象,给成员变量赋值,如果不填写任何构造方法,java会提供一个空参构造,如果写了任意构造方法,将不再提供空参构造。
格式:

publice 类名(){
	//无参构造
}
public 类名()(String name,int age){
		//有参构造
		this.anme=name;
		this.age=age;

}

实例:

public class Student {
	String name; //类的属性
	int age;
	public Student() {
		//无参构造
	}
	public Student(String name,int age) {
		//有参构造
		this.name=name;
		this.age=age;
	}

}

调用

public class CallClass {

	public static void main(String[] args) {
		//构造方法
		//调用空参构造
		Student s1=new Student();
		//调用有参构造
		Student s2=new Student("李四",17);
		
		System.out.println(s1.name+"=========="+s1.age);
		System.out.println(s2.name+"=========="+s2.age);

	}

}

输出结果:
null0
李四
17

成员变量和局部变量

定义位置:成员变量在类中方法外定义,局部变量在方法内或者方法参数或语句内定义
范围:成员变量本类中所有方法都能使用,局部变量:当前所属的区域(方法或语句)

this关键字

this关键字代表的是本类对象,调用的就是成员属性(相当于python中的self)

static关键字

作用:无需创建对象直接用类名点的方式可以调用
可以使用在方法和变量
特点:静态智能直接访问静态

public class Teacher {
	String name;  //非静态属性
	static int age; //静态的属性,不需要创建对象可以直接用类名点的方法调用
	public void eat(){ //非静态方法
		System.out.println("Teacher is eating");
		
	}
	public static void sleep() { //静态方法,不需要创建对象可以直接用类名点的方法调用
		System.out.println("Teacher is sleeping");
	}
}

调用

public class CallTeacher {

	public static void main(String[] args) {
		// static关键字
		//不创建对象的情况下直接调用非静态属性或方法
		Teacher.age=30;
		Teacher.sleep();
		System.out.println(Teacher.age);
		//非静态属性或方法,必须创建对象后才能调用
		Teacher t1=new Teacher();
		t1.name="Mr zhang";
		t1.eat();
		System.out.println(t1.name);		
	}

}

修饰符

在这里插入图片描述

封装

定义:封装,即不关注对象的属性和实现细节,仅对外公开接口,控制程序中属性的读和写的访问级别。

简单理解:提高了代码的阅读性,提高了代码可维护性,无需关注内部实现,只需要调用即可。
get/set方法

  • 封装
public class Phone {
	private String brand;  //定义私有属性
	private String price;
	
	//封装私有属性
	public void setBrand(String brand) {
		this.brand=brand;
	}
	public String getBrand() {
		return this.brand;
	}

}
  • 调用
public class CallPhone {

	public static void main(String[] args) {
		// 调用封装
		Phone p= new Phone(); 
		//因为对属性进行了私有化的封装,因此无法直接用点属性的方式直接调用
		//此时必须通过set方法设置属性值,并用get方法调用属性值
		p.setBrand("华为");  //通过set方法设置属性
		String myphone=p.getBrand();//通过get方法获得属性
		System.out.println(myphone);
		}

}

继承

  • 继承:子承父业
  • java 两个类之间通过extends关键字描述父子关系,子类便可拥有父类的公共方法和公共属性
  • 优点:提高了代码复用性,代码的维护性更高
  • 继承的格式: extend 父类名称

定义父类

public class FatherClass {
	public String name;  //子类只能继承父类公共属性或方法
	private int age;
	
	public void canInherit() {
		System.out.pringln("公共方法可以继承");
	}
	private void canotInherit() {
		System.out.println("私有方法不可以继承");
	}

}

定义子类

package com.darlyl.inherit;

public class SonClass extends FatherClass{  // extends 父类名,指明此类事继承父类的属性和方法
	//不定义属性及方法,仅继承父类的属性和方法

}

调用

public class CallSon {

	public static void main(String[] args) {
		// 调用子类,验证是否继承了父类的属性和方法
		SonClass son1=new SonClass();
		son1.name="张三 ";
		System.out.println("son1.name");
		son1.canInherit();
		
	}

类继承的特点

子类不能继承父类的private成员(属性,方法)
类与类智能单继承,多层继承
一个类如果不继承任何类,自动继承Object类,Object是所有类的祖宗;
先出事话父类在初始化子类。

super关键字

super:代表父类对象,在子类中不用new创建父类对象,直接用super代表父类对象调用父类属性或方法;

public class SonClass extends FatherClass{  // extends 父类名,指明此类事继承父类的属性和方法
	
	public void hello() {
		System.out.println();
		super.canInherit();//canInherit是父类中的方法
	}
}

super(…):只能出现在构造方法第一行,super(…)调用父类构造
当父类构造是空参时用super(),默认情况是调用父类无惨的。所有时候不写;
当父类构造是有参时用super(参数)
定义父参空参构造

public class FatherClass {
	public String name;  //子类只能继承父类公共属性或方法
	private int age;
	public FatherClass() {
		System.out.println("这是父类的空参构造");
	}
}

子类调用父类空参

public class SonClass extends FatherClass{  // extends 父类名,指明此类事继承父类的属性和方法
	public SonClass() {
		super(); //代表调用父类的空参构造,此语句只能写在构造函数的最前面
	}

}

主函数实例化子类,

public class CallSon {

	public static void main(String[] args) {
		// 调用子类,验证是否继承了父类的属性和方法
		SonClass son1=new SonClass();
	}

}

定义父类有参构造

public class FatherClass {
	public String name;  //子类只能继承父类公共属性或方法
	private int age;
	public FatherClass(String name, int age) {
		System.out.println("这是父类的有参构造");
		this.name=name;
		this.age=age;
	}
}

子类调用父类有参构造

public class SonClass extends FatherClass{  // extends 父类名,指明此类事继承父类的属性和方法
	public SonClass() {
		super("王五",30);
	}
}

创建对象

public class CallSon {

	public static void main(String[] args) {
		// 调用子类,验证是否继承了父类的属性和方法
		SonClass son1=new SonClass();

	}

}

方法重写

重写:父类和子类出现了一模一样的方法
作用:对父类方法进行升级或者改造

定义父类方法

public class FatherClass2 {
	public String name;  //子类只能继承父类公共属性或方法
	private int age;
	
	public void canInherit() {
		System.out.println("公共方法可以继承 ");
	}
	private void canotInherit() {
		System.out.println("私有方法不可以继承");
	}
}

子类重写父类方法

public class SonClass2 extends FatherClass2{  // extends 父类名,指明此类事继承父类的属性和方法
	public void canInherit() {
		//对父类方法的升级改造,放弃父类方法,完全重写
		System.out.println("对父类继承方法的重写 ");
		//在父类方法基础上补充内容
		super.canInherit();
		System.out.println("在父类的基础上进行改造 ");
	}
	

}

创建子类对象,并调用子类方法

public class CallMain {
	public static void main(String[] args) {
		SonClass2 son2= new SonClass2();
		son2.canInherit();
	}
	

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值