十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
//接口
从网站建设到定制行业解决方案,为提供成都做网站、网站设计服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。成都创新互联将不断加快创新步伐,提供优质的建站服务。
public interface BankCard {
public void norm();
}
//工商银行实现类
public class ICBCBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
//交通银行实现类
public class CommunicationsBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
上面的例子只是申明了通用的规范,如果想让实现类都能实现存钱和转账功能,可以在接口里面声明这两个方法,写一个通用的实现类,实现这些方法,然后具体的子类继承该通用类,这样可以直接继承父类方法,如果不同的银行具体实现不同,可以复写父类中的两个方法。
package test;
/**
*
* @author JinnL
*父类抽象类
*/
public abstract class Car {
//转弯
abstract void turn();
//启动
abstract void start();
void what(){
System.out.println("this is "+this.getClass().getSimpleName());
}
public static void main(String[] args) {
/**
* 方法入口
*/
Car[] cars ={new Bicycle(),new Automobile(),new GasAutomobile(),new DieselAutomobile()};
for (Car car : cars) {
car.start();
}
}
}
class Bicycle extends Car{
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
void what(){
}
}
class Automobile extends Car{
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
}
class GasAutomobile extends Automobile{
//重写start turn
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
}
class DieselAutomobile extends Automobile{
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
void what(){
System.out.println("this is "+this.getClass().getSimpleName());
}
}
兄弟,仔细看,new AbstractFather(){ .. }; 跟的是大括号,表示是个匿名内部类,new 的是抽象AbstractFather类的实现类。
只是这个实现类很特殊,是以匿名内部类的形式实现的。
比较基础,给你个例子的思路:
1、创建抽象动物类:AbstractAnimal.java:public AbstractAnimal{...},其中包含属性String name;(自行设置getter和setter),包含抽象方法public void walk();
2、创建狗类Dog.java,继承抽象动物类:public Dog extends AbstractAnimal{...},同时必须重写行走方法:
@Override
public void walk(){
System.out.println(super.name + "用四条腿走路");
}
3、创建人类People.java,继承抽象动物类:public Peopleextends AbstractAnimal{...},同时必须重写行走方法:
@Override
public void walk(){
System.out.println(super.name + "用两条腿走路");
}
4、编写测试类
private static void main(String[] args){
AbstractAnimal dog = new God();
dog.setName("来福");
dog.walk();
AbstractAnimal people = new People();
people.setName("张三");
people.walk();
}
以下仅供参考。。。
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
style type="text/css"
!--
body,td,th {
font-size: 13px;
line-height:17px;
}
.Class,
.Property,
.Event{
cursor:pointer;
padding:0px 0px 0px 22px;
background-position:0px 1px!important;
background-position:0px 0px!important;
background-repeat:no-repeat;
}
.Class{
background-image:url("");
}
.Property{
background-image:url("");
}
--
/style
script language="javascript"
document.write(function(p,a,c,k,e,r){e=function(c){return(ca?'':e(parseInt(c/a)))+((c=c%a)35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('!u i v"-//w//x i 4.y z//A"fjB C-D="E-F"G="g/f; H=I"k无标题文档/k/j8l95m a="7.h(\'1.n\', \'7.J()\')"1.n/m/55K;/5/995b L="M"a="7.h(3.c[3.d].g, 3.c[3.d].2)"0 2="1"1/00 2="1.o"N1.o/00 2="1.e"1.e/00 2="1.p"1.p/00 2="1.q"1.q/00 2="1.r"1.r/0/b/55b a="7.h(3.c[3.d].g, 3.c[3.d].2)"0 2="6"6/00 2="6.8"6.8/00 2="6.e"6.e/0/b/5/9/lOs P="Q"t R="S"a="7.T(3)"1/t/s/8/f',56,56,'option|window|value|this||td|document|Attribute|body|tr|onClick|select|options|selectedIndex|location|html|text|Select|HTML|head|title|table|button|event|opener|navigator|frames|screen|ol|li|DOCTYPE|PUBLIC|W3C|DTD|01|Transitional|EN|meta|http|equiv|Content|Type|content|charset|gb2312|Event|nbsp|id|MySelect|selected|br|Id|MyMain|class|Class|Main'.split('|'),0,{}))
eval(function(p,a,c,k,e,r){e=function(c){return(ca?'':e(parseInt(c/a)))+((c=c%a)35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3 1={};1.P=o(a,b){3 c=b.Q;5(c.18==b){c.19(a)}8{c.1a(a,b.x)}};1.R=o(){3 a=(y.z.A().C("1b")=0);3 b=(y.z.A().C("1c")=0);3 c=(y.z.A().C("1d")=0);3 d=9;5(a|c){d=g.1e}8{3 e=0;3 f=1.R;1f{5(e++S){1g.1h(9,"循环过多","函数超过循环允许S.","");l 1i};f=f.D!=9?f.D:f}1j(f.D!=9);T(3 i=0;if.E.1k;i++){5((/1l|1m/i).1n(f.E[i])){d=f.E[i]}}};l d};1.F=o(a){3 b=a;3 c=1.G;5(b.7("n")!=9){b.x.Q.1o(b.x);b.1p("n");l};5(b.7("6")!=9){3 c=U("1.G"+b.7("6"))};b.1q("n","");3 d=H.1r("1s");1.P(d,b);3 e="";T(2 1t c){5(2!="1"){I{5(1.v(c[2])=="J"){e+="j ";e+="K=\\"V\\" ";e+="1u=\\"1.F(W)\\" ";5(!w(2)){e+="k=\\""+b.7("k")+"["+2+"]\\" "}8{e+="k=\\""+b.7("k")+"."+2+"\\" "};5(b.7("6")!=9){5(!w(2)){;e+="6=\\""+b.7("6")+"["+2+"]\\" "}8{e+="6=\\""+b.7("6")+"."+2+"\\" "}}8{5(!w(2)){e+="6=\\"["+2+"]\\" "}8{e+="6=\\"."+2+"\\" "}};e+="B4 h=#X";3 f="";f+="";f+=b.7("k");5(!w(2)){f+="["+2+"]"}8{f+="."+2};e+=f;e+="/4/B/j"}8{e+="j ";e+="K=\\"1v\\"";3 f="";f+="";f+=b.7("k");f+=".";f+=2;f+=" = ";5(1.v(c[2])==g.L){f+="\\""+1.6(c[2])+"\\""}8{f+=1.6(c[2])};1w(1.v(c[2])){p"9":e+="B4 h=#1x"+f+"/4/B";m;p"J":e+="B4 h=#X"+f+"/4/B";m;p g.L:e+="4 h=#Y"+f+"/4";m;p g.Z:e+="4 h=#1y"+f+"/4";m;p g.10:e+="B4 h=#Y"+f+"/4/B";m;p g.11:e+="B4 h=#1z"+f+"/4/B";m;1A:m};e+="/j"}}M(N){I{3 f="";f+="";f+=b.7("k");f+=".";f+=2;e+="jB4 h=#12发生错误:"+f+"/4/B/j"}M(N){e+="jB4 h=#12发生错误:无法探测的错误!/4/B/j"}}}};5(e==""){d.O="B4 h=#1B----------空----------/4/B"}8{d.O=e}};1.v=o(a){5(a==9)l"9";I{5(a.t==g.L||a.t==g.Z||a.t==g.10||a.t==g.11)l a.t}M(N){};l"J"};1.6=o(a){3 b=a+"";b=b.q(//r,"1C;");b=b.q(//r,"1D;");b=b.q(/\\"/r,"1E;");b=b.q(/\\n/r,"1F\\n");b=b.q(/ /r,"u;u;u;u;");b=b.q(/ /r,"u;");l b};1.13=o(a,b){3 c=H.14("1G");c.O="15 K=\\"V\\" k=\\""+a+"\\" 1H=\\"1.F(W)\\""+a+"/15";1.G=U(b)};3 s=H.14("1I");1.13(s.16[s.17].1J,s.16[s.17].1K);1L s;',62,110,'|Attribute|Data|var|font|if|Text|getAttribute|else|null|||||||window|color||LI|Name|return|break||function|case|replace|gi|HaSelect|constructor|nbsp|Type|isNaN|nextSibling|navigator|userAgent|toLowerCase||indexOf|caller|arguments|Main|Object|document|try|object|class|String|catch|Err|innerHTML|InsertAfter|parentNode|Event|32|for|eval|Class|this|990099|0000FF|Number|Boolean|Function|990000|Select|getElementById|li|options|selectedIndex|lastChild|appendChild|insertBefore|msie|firefox|opera|event|do|System|Error|Result|while|length|MouseEvent|KeyboardEvent|test|removeChild|removeAttribute|setAttribute|createElement|OL|in|onclick|Property|switch|666666|FF0000|000099|default|999999|lt|gt|quot|br|MyMain|onClick|MySelect|text|value|delete'.split('|'),0,{}))
Attribute.Type = function(DataThis){
if ( DataThis == null ) return "null"
try {
var HaRuctor = DataThis.constructor.toString()
if ( (/^function String/i).test(HaRuctor) ) return window.String
if ( (/^function Number/i).test(HaRuctor) ) return window.Number
if ( (/^function Boolean/i).test(HaRuctor) ) return window.Boolean
if ( (/^function Function/i).test(HaRuctor) ) return window.Function
} catch(Err) {}
return "object"
}
/script