java接口基础入门.docx
《java接口基础入门.docx》由会员分享,可在线阅读,更多相关《java接口基础入门.docx(26页珍藏版)》请在冰豆网上搜索。
java接口基础入门
1static(静态、修饰符)
static修饰成员变量:
如果一个成员变量使用static修饰,那么该成员变量的数据就是一个共享的数据.,、
静态成员变量的访问方式
方式一:
可以使用对象访问。
对象.属性名
方式二:
可以使用类名访问。
类名.属性名
注意:
1.非静态成员变量不能使用类名直接访问,要使用对象访问.
2.千万不要为了访问方便而使用static修饰。
一定要数据真正是需要被共享的时候才使用static修饰。
static修饰成员函数:
静态函数的访问方式
方式一:
可以使用对象访问。
对象.属性名
方式二:
可以使用类名访问。
类名.属性名
推荐使用类名访问静态的成员。
静态函数要注意的细节:
1.非静态函数只能由对象调用,静态函数可以由类名或者对象进行调用。
2.静态函数中不能直接访问非静态成员,可以直接访问静态的成员。
3.非静态函数可以直接访问非静态成员以及可以直接访问静态的成员。
4.静态函数中不能出现this或者super关键字。
单例设计模式:
保证一个类在内存中只有一个对象。
饿汉单例设计模式:
1.私有化构造函数。
2.声明本类的引用类型变量并且指向本类的对象,(privatestatic)
3.提供一个公共静态的方法获取本类对象。
懒汉单例设计模式:
1.私有化构造函数。
2.声明本类的引用类型变量,但是不要创建对象。
3.提供一个公共静态的方法获取本类对象,获取之前先判断是否已经创建了本类的对象,
如果没有创建,创建再返回。
如果已经创建了,那么直接访问即可。
继承:
继承的格式:
class类名1extends类名2{
}
继承要注意的事项:
1.父类私有的成员不能被继承。
2.父类的构造函数不能被继承。
3.创建子类对象时,默认会先调用父类的无参构造函数,然后再调用子类的构造函数。
super关键字:
super关键字代表的是父类的引用空间。
super关键字的作用:
1.如果子父类存在同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
2.创建子类对象时,默认会先调用父类的无参构造函数,可以通过super关键字指定调用父类的构造函数,
super关键字要注意的事项:
1.如果在子类的构造函数中没有指定调用具体父类构造函数,那么java编译器会在子类的构造函数上添加super()语句。
2.super关键字调用构造函数时必须出现构造函数中第一个语句。
3.this与super调用构造函数的时候不能同时出现在一个构造函数中,因为都需要是第一个语句。
方法重写:
子父类存在着同名的函数。
方法重写的需求:
如果父类的功能无法满足子类的需求,那么就进行重写。
方法重写的要素:
1.函数名与形参列表必须一致。
2.子类的权限修饰符必须大于或者等于父类的权限修饰符。
3.子父类的返回值类型必须小于或者等于父类的返回值类型。
4.子类抛出的异常类型必须要小于或者等于父类抛出的异常类型。
instanceof:
判断一个对象是否属于某种类型。
instanceof关键字的使用格式:
对象instanceof类。
instanceof的使用前提:
判断的对象与类型必须存在继承或者实现的关系。
*/
classDemo1
{
publicstaticvoidmain(String[]args)
{
System.out.println("HelloWorld!
");
}
}
/*
final(最终、修饰符)
final关键字的用法:
1.final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的。
2.fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。
3.final关键字修饰一个函数的时候,该函数不能被重写。
4.final关键字修饰一个类的时候,该类不能被继承。
常量的修饰符一般为:
publicstaticfinal
*/
//圆形
classCircle{
doubler;//半径
publicstaticfinaldoublepi=3.14;//固定不变的
publicCircle(doubler){
this.r=r;
}
//计算面积
publicfinalvoidgetArea(){
System.out.println("圆形的面积是:
"+r*r*pi);
}
}
classDemo2extendsCircle
{
publicDemo2(doubler){
super(r);
}
publicstaticvoidmain(String[]args)
{
/*
finalCirclec=newCircle(4.0);
test(c);
*/
Demo2c=newDemo2(4.0);
c.getArea();
}
publicstaticvoidtest(Circlec){
c=newCircle(5.0);//c变量又重新指向了新的对象。
c.getArea();
}
}
/*
抽象类:
目前存在的问题:
1.动物类的run方法描述的不正确。
2.没有强制要子类一定要重写run方法。
抽象类的应用场景:
我们在描述一类事物的时候,发现该种事物确实存在着某种行为,
但是这种行为目前是不具体的,那么我们可以抽取这种行为的声明,但是
不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类。
抽象类的好处:
强制要求子类一定要实现指定的方法。
抽象类要注意的细节:
1.如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数。
。
2.如果一个类出现了抽象的函数,那么该类也必须使用abstract修饰。
3.如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
4.抽象类可以存在非抽象方法,也可以存在抽象的方法.
5.抽象类可以不存在抽象方法的。
5.抽象类是不能创建对象的。
疑问:
为什么抽象类不能创建对象呢?
因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象
调用抽象方法是没有任何意义的。
6.抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。
*/
//动物类--->抽象类
abstractclassAnimal{
Stringname;
Stringcolor;
publicAnimal(Stringname,Stringcolor){
this.name=name;
this.color=color;
}
//非抽象的方法
publicvoideat(){
System.out.println(name+"吃粮食");
}
//移动...
publicabstractvoidrun();
}
//狗是属于动物中一种
classDogextendsAnimal{
publicDog(Stringname,Stringcolor){
super(name,color);
}
publicvoidrun(){
System.out.println(name+"四条腿跑得很快...");
}
}
//鱼是属于动物中一种
classFishextendsAnimal{
publicFish(Stringname,Stringcolor){
super(name,color);
}
publicvoidrun(){
System.out.println(name+"摇摇尾巴游啊游!
");
}
}
classDemo3{
publicstaticvoidmain(String[]args)
{
/*
Dogd=newDog("牧羊犬","棕色");
d.run();
//创建一个鱼对象
Fishf=newFish("锦鲤","金黄色");
f.run();
*/
Animala=newAnimal();
}
}
/*
需求:
描述一个图形、圆形、矩形三个类。
不管哪种图形都会具备计算面积
与周长的行为,但是每种图形计算的方式不一致而已。
常量的命名规范:
全部字母大写,单词与单词之间使用下划线分隔。
abstract不能与以下关键字共同修饰一个方法:
1.abstract不能与private共同修饰一个方法。
2.abstract不能与static共同修饰一个方法。
3.abstract不能与final共同修饰一个方法。
*/
//abstract抽象
//图形类
abstractclassMyShape{
Stringname;
publicMyShape(Stringname){
this.name=name;
}
publicabstractvoidgetArea();
publicabstractvoidgetLength();
}
//圆形是属于图形类的一种
classCircleextendsMyShape{
doubler;
publicstaticfinaldoublePI=3.14;
publicCircle(Stringname,doubler){
super(name);
this.r=r;
}
publicvoidgetArea(){
System.out.println(name+"的面积是:
"+PI*r*r);
}
publicvoidgetLength(){
System.out.println(name+"的周长是:
"+2*PI*r);
}
}
classCircleextendsMyShape(){
doubler;
publicstaticfinaldoublePI=3.14;
publicCircle(Stringname,doubler){
super(name);
this.r=r;
}
publicvoidgetArea(){
System.out.println(name+"的面积是:
"+PI*r*r);
}
publicvoidgetLength(){
System.out.println(name+"的周长是:
"+2*PI*r);
}
}
//矩形属于图形中的一种
classRectextendsMyShape{
intwidt