Java学习总结:类和对象,类的继承,接口/事件

本文详细介绍了面向对象编程的基本概念,包括类和对象的定义及其关系,通过实例展示了如何创建和使用类。此外,还探讨了类的继承特性,解释了子类如何继承父类的属性和方法,以及重写方法的概念。最后,介绍了接口在多态中的作用,以及如何实现和使用接口。这些内容对于理解面向对象编程的原理至关重要。
摘要由CSDN通过智能技术生成

1.类和对象

对象(object):任何一个具体的事物或物体。

类(class):对具有相同属性和方法的对象的抽象。类在使用时,需要定义类的属性和方法。同时,类名和文件名需保持相同。

举例:小明正在学习Java课程,学分增加了5 分,现在的学分是95分。

对象1 小明:属性:名字,学分;方法:学习   < --------- > 类1 Student

对象2 Java:属性:名字,学分;方法:无  < --------- > 类2 Course

首先定义Student类:

public class Student {
	//属性
	public String name;
	public int score;
	
	//方法
	public void study(Course c) {
		score += c.score;
		System.out.println(name+"正在学习"+c.name+",学分增加了"+c.score+"分,"
				+ "现在分数是"+score+"分。");			
	}
}

接着定义Course类:

public class Course {
	//属性
	public String name;
	public int score;

    //方法:无
}

在调用类时,要先根据类创建一个对象名,用对象名来调用类里面的属性和方法。创建对象的格式:类 对象变量名 = new 类( )

最后编写一个主程序运行:

public class Manage {
	public static void main(String[] args) {
		//创建对象名
		Student stu = new Student();
		stu.name = "小明";
		stu.score = 90;
		
		Course c = new Course();
		c.name = "Java";
		c.score = 5;
		
		stu.study(c);				
	}
}

注意:在上述类的定义里用到的都是public权限。如果使用private,则需要额外在类里编写方法访问该私有属性。

//类1 Student
public class Student {
	//属性
	private String name;
	private int score;
	
    //访问私有属性方法
	public void setName(String n) {
		name = n;
	}
	public void setScore(int s) {
		score = s;
	}
	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}

	//方法
	public void study(Course cp) {
		score = getScore() + cp.getScore();
		System.out.println(getName()+"正在学习"+cp.getName()+
				"课程,学分增加了"+cp.getScore()+
				"分,现在的分数是"+score+"。");
	}		
}

//类2 Course
public class Course {
	//属性
	private String name;
	private int score;
	
    //访问私有属性方法
	public void setName(String n) {
		name = n;
	}
	public void setScore(int s) {
		score = s;
	}
	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}
}

//主程序
public class Manage {
	public static void main(String[] args) {
		//创建对象
		Student stu = new Student();
		stu.setName("芦振");
		stu.setScore(90);
		
		Course c = new Course();
		c.setName("Java");
		c.setScore(5);
		
		stu.study(c);	
	}
}

2.类的继承

继承:生活中存在包含所属关系的事物。比如:爷爷-->爸爸-->孙子

类的继承规则:(1) 子类(派生类)和父类(基类,超类)必须有相同的属性和方法名。

                         (2) 一个子类只能继承一个父类。一般调用格式: public class extends 父类 ( implements 接口1,接口2,...){ }

                         (3) 子类会继承父类中的所有属性和方法,但私有属性和方法不能直接使用。

                         (4) 子类可以重写(overwrite)父类中的方法,但必须和父类中的方法同名同参。重写后,调用时调用子类的方法;未重写则直接调用父类中的方法。

                         (5) 子类会继承父类中的所有属性和方法,但私有属性和方法不能直接使用(setName( ),getName( )...)。

类的继承作用:多态,即同一类型的对象可以具有不同的行为,增加了程序的灵活性。

//定义父类:Student
public class Student {

	private String name;
	
	//方法
	public void setName(String n) {
		this.name = n;   //super表示当前类的父类对象; this表示本类对象
	}
	public String getName() {
		return name;
	}
	public void study() {
		System.out.println(name+"正在学习!");
	}

}

//定义子类:UNStudent
public class UNStudent extends Student {

	//定义自己的方法
	public void printname() {
		System.out.println("名字是"+getName());
	}
		
	//方法重写
	//作用于有继承关系的两个类之间   
	//(子类的访问修饰符大于等于父类)返回值类型,方法名,参数类型(个数,顺序)完全一样
	public void study() {
		System.out.println("子类重写父类的学习方法!");
	}

}

//定义子类:Teacher
public class Teacher extends Student{
    
    //方法里面传递的参数的是父类Student的对象s
	public void teach(Student s) {
		s.study();
	}

}

//主程序
public class Manage {

	public static void main(String[] args) {
		
		//自动转型(向上转型)
		Student un = new UNStudent();  //注意左边是父类+对象名
		un.setName("小明");
		un.study();
		//un.printname()不能被执行,因为Student类里面没有printname()方法。此时要用到强制转型
		
		//强制转型(向下转型):只能子类强制转型
		UNStudent unst = (UNStudent) un;
		unst.printname();
		
        //使用Teacher子类
		Teacher te = new Teacher();
		te.teach(un);		
	}

}

注意:(1) 自动转型:只能调用父类和子类同时定义的方法。

                un.printname()不能被执行,因为Student类里面没有printname()方法。此时要用到强制转型

           (2) 强制转型:只能将子类强制转型。此处格式:子类 对象名1 = (想转化的类) 对象名2

           (3) 子类的访问修饰符必须大于父类;访问修饰符权限大小关系:public > default(缺省) > protected > private。

 访问权限同一类内同一包内子类 任何地方
private             
protected            √     
default                
public                     

 

3.接口/事件

接口(interface)是一种特殊的类,只有方法名没有方法体。事件是接口里面方法的参数,也是一种类。

接口是子类的父类,其子类可以自动转型为实现的接口类。同时子类可以继承多个接口。一般调用格式: public interface implements 接口1,接口2,...{}

接口中定义的方法是虚拟方法,子类继承以后必须实现(implement)接口中的方法。

//定义一个接口类
public interface Person{

    //接口没有属性,只有虚拟的方法,并且没有方法体。
    public void friend(String name);
    public void study(int hour);

}

//实现接口类,重写接口中的方法
public class Student implements Person{

    private String name;
    private int score;

    public Student(String n){
        this.name = n;
    }

    //实现接口中的friend方法:方法体可以空,但是必须方法必须出现在这里。
    public void friend(String name){

    }

    //实现接口中的study方法
    public void study(int hour){
        score = 3*hour;

    }

    //定义子类自己的方法
    public void show(){
        System.out.println(name + "得分" + score);
    }
}

//主程序
public class Manage {

	public static void main(String[] args){

	    Student stu = new Student("小明");
	    stu.study(5);
	    stu.show();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值