三大特性:
修饰符 返回值类型 方法名(参数){
? 方法体
return;
}
//对象类型 对象名字 = 对象值(//new 对象类型()//);
例如:
Student student = new Student();
student.say();
形参和实参
值传递和引用传递
this关键词
创建:属性+方法
类是抽象的,需要实例化new
Student student = new Student();
类实例化后会返回一个自己的对象
//无参构造
public Person(){
}
//有参构造
public Person(String name){
}
一旦定义有了有参构造,无参就必须显示定义
快捷键 alt+insert
类是一个模板,对象是一个具体的实例
对象的引用:
? 引用类型:基本类型(8)
? 对象是通过引用来操作的:栈------>堆
属性:字段field 成员变量
默认初始化
定义:修饰符 属性类型 属性名 = 属性值!
对象的创建和使用:
类:
属性私有,get/set
//main文件
import duiXiang.fengZhuang;
public class main {
public static void main(String[] args) {
fengZhuang s1 = new fengZhuang();
s1.setName("李文丽");
System.out.println(s1.getName());
}
}
//封装文件
package duiXiang;
public class fengZhuang {
//属性私有
//private 私有
private String name;
private int xuehao;
private char sex;
//提供一些可以操作这些属性的方法
//提供一些public的get、set的方法
//通过get获得这个数据
public String getName(){
return this.name;
}
//通过setName设定值
public void setName(String name){
this.name = name;
}
}
快捷键:alt+insert
package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
* default默认的
* private私有的
* */
public class person {
public int money = 100000;
public void test(){
System.out.println("我是爸爸");
}
}
package duiXiang.jiCheng;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//students:派生类
public class students extends person{
/*public void test(){
//System.out.println("我是儿子");
}*/
}
//main类
import duiXiang.fengZhuang;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;
public class main {
public static void main(String[] args) {
/*fengZhuang s1 = new fengZhuang();
s1.setName("李文丽");
System.out.println(s1.getName());
s1.setXuehao(190875129);
System.out.println(s1.getXuehao());
s1.setSex(‘男‘);
System.out.println(s1.getSex());*/
students s1 = new students();
s1.test();
System.out.println(s1.money);//继承了父类的属性
}
}
输出结果:
我是爸爸
100000
Process finished with exit code 0
调用父类的属性
调用父类的构造器必须在子类的构造器的第一行
super必须只能出现在子类的方法或者构造方法中
super和this不能同时调用构造方法
//main类
import duiXiang.fengZhuang;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;
public class main {
public static void main(String[] args) {
/*fengZhuang s1 = new fengZhuang();
s1.setName("李文丽");
System.out.println(s1.getName());
s1.setXuehao(190875129);
System.out.println(s1.getXuehao());
s1.setSex(‘男‘);
System.out.println(s1.getSex());*/
students s1 = new students();
s1.test("靳若嘉");
//s1.test(s1.name);
//System.out.println(s1.money);//继承了父类的属性
}
}
package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
* default默认的
* private私有的
* */
public class person {
public String name = "jinruojia";
}
package duiXiang.jiCheng;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//students:派生类
public class students extends person{
public String name = "liwenli";
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
只能在public的定义下重写
需要有继承关系,并且是子类重写父类的方法
方法名必须相同
参数列表都要必须相同
5. 抛出的异常:可以被缩小但是不能扩大
子类的方法和父类的方法必须相同,方法体可以不同
父类的功能子类不一定需要或者不一定满足
package duiXiang.duoTai;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;
public class duoTaiDemo01 {
//一个对象的实际类型是确定的,可以指向的以用类型不确定:父类的引用指向子类
public static void main(String[] args) {
//students是子类:能够调用的方法只有自己的或者继承父类的
students s1 = new students();
//person是父类:可以指向子类,但是不能调用子类独有的方法
person s2 = new students();
Object s3 = new students();
//只有子类重写父类的方法后,执行子类的方法
s1.run();
s2.run();
((students) s2).eat();//强制转换
s1.eat();
}
}
/*
* 1.多态是方法的多态,属性没有多态
* 2.父类和子类要有联系,会有类型转换异常ClassCastException
* 3.存在的条件:
* 1.要有继承关系
* 2.方法需要重写
* 3.父类的引用指向子类对象
* 4.static方法不能重写
* 5.被final修饰的不能重写
* 6.通过private修饰的方法不能重写
* */
package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
* default默认的
* private私有的
* */
public class person {
public String name = "jinruojia";
public void run(){
System.out.println("pao");
}
}
package duiXiang.jiCheng;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//students:派生类
public class students extends person{
public void eat(){
System.out.println("eat");
//子类可以直接继承父类的方法
/* person r1 = new person();
r1.run();*/
}
@Override
public void run() {
System.out.println("zou");
}
}
instanceof类型转换:引用类型转换
package duiXiang.duoTai;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;
import duiXiang.jiCheng.teacher;
public class duoTaiDemo01 {
public static void main(String[] args) {
//类型之间的转化: 父 子
//子类转换成父类可能丢失原本的一些方法
//高 低
person s1 = new students();
//转换
((students)s1).go();
//或者
students students = (students) s1;
students.go();
/*
* 1.父类引用指向子类的对象
* 2.把子类转换为父类,向上转型
* 3.把父类转换成子类,向下转型:强制转换
* */
}
}
package duiXiang.jiCheng;
public class person {
public void run(){
System.out.println("pao");
}
}
package duiXiang.jiCheng;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//students:派生类
public class students extends person{
public void go(){
System.out.println("go");
}
}
原文:https://www.cnblogs.com/jrj-share/p/14652423.html